Elasticsearch 多字段搜索

Posted naughtybaby

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Elasticsearch 多字段搜索相关的知识,希望对你有一定的参考价值。

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

如果一个 query 可以通过 QR 结构化,如哪些词是 title,哪些词是 author,那么就可以直接在相关字段中查询,使用布尔查询即可解决问题,布尔查询是“匹配越多越好”,如搜“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。

1. best_fields

2. most_fields

3. cross_fields

4. phrase

5. phrase_prefix

 

参考资料

  • Elasticsearch: 权威指南:https://es.xiaoleilu.com/110_Multi_Field_Search/10_Single_query_string.html
  • Elasticsearch Reference:https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-multi-match-query.html

以上是关于Elasticsearch 多字段搜索的主要内容,如果未能解决你的问题,请参考以下文章

Elasticsearch 多字段搜索

Elasticsearch如何使用 Elasticsearch 6.2 搜索中文日文和韩文文本 - 第 2 部分: 多字段

Elasticsearch系列---多字段搜索

ElasticSearch 学习笔记一 简介

Elasticsearch 中的多字段聚合

[Elasticsearch] 多字段搜索 - multi_match查询和多数字段