我的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的分数回归。
这不管是什么类型或提升。我可以按类型提升,或者有没有办法透露或“解释”搜索结果,以便我可以按分数排序?
答案 0 :(得分:4)
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
,重写方法首先将每个术语转换为should
查询中的bool
子句,并保留由查询计算的分数。
请注意,这可能是CPU密集型的,并且默认限制为1024 bool
个查询子句,可以轻松地为大型文档语料库命中;例如,在完整的StackOverflow数据集(问题,答案和用户)上运行查询时,会触及问题的子句限制。您可能希望使用使用an edgengram token filter的分析器分析某些文本。
答案 1 :(得分:0)
通配符搜索将始终返回1分。 您可以通过特定类型进行提升。看到这个: How to boost index type in elasticsearch?