es ik 多字段查询_Elasticsearch 多字段搜索

本文详细介绍了在 Elasticsearch 中进行多字段查询的三种策略:best_fields、most_fields 和 cross_fields,以及如何利用 dis_max 和 bool 查询来优化搜索效果。通过实例展示了不同策略的查询语句和评分机制,帮助理解如何选择合适的查询方式。
摘要由CSDN通过智能技术生成

查询很少是对一个字段做 match 查询,通常都是一个 query 查询多个字段,比如一个 doc 有 title、content、pagetag 等文本字段,要在这些字段查询含多个 term 的 query,就要对它们的相关度评分做合理的合并。这被称为多词(multiword)、多字段(multifield)查询。

如果一个 query 可以结构化,如哪些词是 title,哪些词是 author,那么就可以直接在相关字段中查询,使用 bool 查询即可解决问题,bool 查询是“匹配越多越好”,如搜“War and Peace Leo Tolstoy”,查询语句如下:

GET /_search

{

"query": {

"bool": {

"should": [

{ "match": { "title": "War and Peace" }},

{ "match": { "author": "Leo Tolstoy" }}

]

}

}

}

还可以对不同的字段加不同的 boost 权重。

以上被称为多重查询字符串,也可算是结构化查询,不过现实中通常是一个 query 在多个字段中查询,即单一查询字符串。毕竟对 query 做结构化需要些 nlp 技术和额外的人力成本,且比起单一查询字符串的效果提升也有限,所以若不是对召回效果有更高追求,还是不要轻举妄动,就好好做一个 query 在多个字段的查询吧。

一个 query 在多个字段中的查询,有三种策略:best_fields、most_fields、cross_fields。

介绍这三种策略之前,先铺垫下布尔查询和 dis_max 查询。

1. bool 查询

一个 query 在多个字段中的查询,同样可使用 bool 查询。

{

"query": {

"bool": {

"should": [

{ "match": { "title": "Brown fox" }},

{ "match": { "body": "Brown fox" }}

]

}

}

}

不过由于 bool 查询评分公式的问题,效果不太好,比如一个文档 title 和 body 都包含 brown,不包含 fox,另一个文档在 body 字段包含了 brown 和 fox,显然后者更符合搜索意图,但 bool 查询的评分前者高,为了理解导致这样的原因

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值