整个文档中的ElasticSearch短语匹配?不仅仅是一个特定的领域

dphi5xsq  于 2021-06-14  发布在  ElasticSearch
关注(0)|答案(2)|浏览(433)

有没有办法在整个文档中使用弹性匹配短语?不仅仅是一个特定的领域。
我们希望用户能够输入带引号的搜索词,并在文档中的任何位置进行短语匹配。

{
    "size": 20,
    "from": 0,
    "query": {
        "match_phrase": {
            "my_column_name": "I want to search for this exact phrase"
        }
    }
}

目前,我只找到特定字段的短语匹配。我必须指定要在其中进行短语匹配的字段。
我们的文档有数百个字段,所以我认为在每个匹配短语查询中手动输入600多个字段是不可行的。生成的json将是巨大的。

vbopmzt1

vbopmzt11#

您可以在匹配查询字段参数中使用*来搜索文档中的所有可用字段。但是它会降低您的查询速度,因为您正在搜索整个文档

w46czmvw

w46czmvw2#

您可以使用短语类型的多重匹配查询,该查询对每个字段运行匹配短语查询,并使用来自最佳字段的分数。请参阅短语和短语前缀。
如果未提供任何字段,则multi\u match查询默认为index.query.default\u field index settings,后者又默认为*。这将提取Map中符合术语查询条件的所有字段,并过滤元数据字段。然后合并所有提取的字段以构建查询。
添加索引数据、搜索查询和搜索结果的工作示例
索引数据:

{
    "name":"John",
    "cost":55,
    "title":"Will Smith"
}
{
    "name":"Will Smith",
    "cost":55,
    "title":"book"
}

搜索查询:

{
  "query": {
    "multi_match": {
      "query": "Will Smith",
      "type": "phrase"
    }
  }
}

搜索结果:

"hits": [
      {
        "_index": "64519840",
        "_type": "_doc",
        "_id": "1",
        "_score": 1.2199391,
        "_source": {
          "name": "Will Smith",
          "cost": 55,
          "title": "book"
        }
      },
      {
        "_index": "64519840",
        "_type": "_doc",
        "_id": "2",
        "_score": 1.2199391,
        "_source": {
          "name": "John",
          "cost": 55,
          "title": "Will Smith"
        }
      }
    ]

相关问题