使用Elasticsearch在多个字段中查找精确短语

时间:2014-08-21 20:48:09

标签: elasticsearch

我想在文档中的多个字段中找到一个确切的短语(例如,"快速的棕色狐狸")。

现在,我正在使用这样的东西:

{
  "query": {
    "filtered": {
      "query": {
        "multi_match": {
          "fields": [
            "subject",
            "comments"
          ],
          "query": "the quick brown fox"
        }
      },
      "filters": {
        "and": [
          {
            "term": {
              "priority": "high"
            }
          }
          ...more ands
        ]
      }
    }
  }
}

问题是,我该怎样才能正确地做到这一点。现在我首先得到最佳匹配,这往往是整个短语,但我也得到了几乎匹配的负载。

2 个答案:

答案 0 :(得分:2)

如果您使用版本为> = 1.1.0的ElasticSearch集群,则可以将multi-match查询的模式设置为phrase

...
  "query": {
    "multi_match": {
      "fields": [
        "subject",
        "comments"
      ],
      "query": "the quick brown fox",
      "type": "phrase"
    }
...

它将替换为match_phrase一个字段生成的匹配查询,该查询将仅返回包含完整短语的文档(您可以在documentation中找到详细信息)

答案 1 :(得分:0)

您是如何分析主题/评论字段的?如果您想要完全匹配,则需要使用关键字tokenizer进行索引/搜索。

相关问题