如何使用通配符从 Elasticsearch 查询字符串中找到真实分数?
How can I find the true score from Elasticsearch query string with a wildcard?
我的 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 分。
这与类型或提升无关。我可以按类型提升,或者,有没有办法显示或 "explain" 搜索结果,以便我可以按分数排序?
通配符搜索总是 return 得分为 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
个查询子句,对于大型文档语料库可以很容易地命中; 运行 例如,您对完整 Whosebug 数据集(问题、答案和用户)的查询达到了问题的子句限制。您可能希望使用使用 an edgengram token filter.
的分析器来分析一些文本
我的 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 分。
这与类型或提升无关。我可以按类型提升,或者,有没有办法显示或 "explain" 搜索结果,以便我可以按分数排序?
通配符搜索总是 return 得分为 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
个查询子句,对于大型文档语料库可以很容易地命中; 运行 例如,您对完整 Whosebug 数据集(问题、答案和用户)的查询达到了问题的子句限制。您可能希望使用使用 an edgengram token filter.