如何通过Nest客户端实现Elasticsearch全字段全文检索搭配日期范围查询
Elasticsearch Nest 全字段检索实现方案
你当前的代码无法实现全文档检索效果:你编写的Match查询未明确指定目标查询字段,默认不会自动遍历文档的所有全文字段进行匹配,因此无法命中space等字段的内容,达不到你期望的检索效果。
调整方案:使用MultiMatch实现跨字段检索
你可以将原有的Match查询替换为MultiMatch查询,指定匹配所有文本字段即可满足需求,调整后的代码如下:
var searchResponse = client.Search<mdl.Event>(s => s .Query(q => q .MultiMatch(m => m .Query(search.Text) // 此处用通配符匹配所有字段,也可以手动列出要检索的文本字段如.Field(f=>f.Text).Field(f=>f.Space),性能更优 .Fields("*") ) && q .DateRange(r => r .Field(f => f.CreatedTimeStamp) .GreaterThanOrEquals(search.From) .LessThanOrEquals(search.To))));
注意事项
- 7.x及以上版本的Elasticsearch默认禁用了旧版的
_all聚合字段,MultiMatch是官方推荐的跨字段检索方案 - 生产环境建议明确列出所有需要检索的文本字段,不要直接使用
*通配符,避免检索布尔、数值等非文本字段带来的额外性能开销,也可以减少不必要的匹配结果
内容的提问来源于stack exchange,提问作者Benjamin Salerno
相关产品推荐
相关产品推荐

