gpt4 book ai didi

elasticsearch - 如何使用通配符从 Elasticsearch 查询字符串中找到真​​实分数?

转载 作者:行者123 更新时间:2023-11-29 02:52:07 26 4
gpt4 key购买 nike

我的 ElasticSearch 2.x NEST 查询字符串搜索包含一个通配符:

在 C# 中使用 NEST:

var results = _client.Search<IEntity>(s => s
.Index(Indices.AllIndices)
.AllTypes()
.Query(qs => qs
.QueryString(qsq => qsq.Query("Micro*")))
.From(pageNumber)
.Size(pageSize));

想出这样的东西:

$ curl -XGET 'http://localhost:9200/_all/_search?q=Micro*'

此代码源自 ElasticSearch page on using Co-variants .结果是协变的;它们是来自多个指数的混合类型。我遇到的问题是所有点击都以 1 分返回。

这与类型或提升无关。我可以按类型推销吗,或者是否有一种方法可以揭示或“解释”搜索结果,以便我可以按分数排序?

最佳答案

Multi term queries like wildcard query默认情况下,给定一个等于提升的常量分数。您可以使用 .Rewrite() 更改此行为。

var results = client.Search<IEntity>(s => s
.Index(Indices.AllIndices)
.AllTypes()
.Query(qs => qs
.QueryString(qsq => qsq
.Query("Micro*")
.Rewrite(RewriteMultiTerm.ScoringBoolean)
)
)
.From(pageNumber)
.Size(pageSize)
);

使用 RewriteMultiTerm.ScoringBoolean,重写方法首先将每个术语转换为 bool 查询中的 should 子句,并保持计算的分数通过查询。

请注意,这可能会占用 CPU 资源,并且默认限制为 1024 个 bool 查询子句,这对于大型文档语料库来说很容易被命中;例如,在完整的 StackOverflow 数据集(问题、答案和用户)上运行查询会达到问题的子句限制。您可能希望使用使用 an edgengram token filter 的分析器来分析一些文本。 .

关于elasticsearch - 如何使用通配符从 Elasticsearch 查询字符串中找到真​​实分数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39602581/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com