如何编写涉及contains-all-of,contains-one-contains,contains-exact和not-contains操作的Elasticsearch查询?

时间:2017-12-15 17:50:41

标签: elasticsearch elasticsearch-5

我有这样的文件:

{
'body': '',
'date': '',
}

我想获得有这些条件的文件:

  • body包含所有:['a','b','c']
  • 并包含以下内容之一:['d','e','f']
  • 并且恰好包含这些短语:['g h i','j k l']
  • 并且不包含:['m','n']

如何创建此查询?

1 个答案:

答案 0 :(得分:1)

您需要使用bool查询。重要的是要注意,对于您的"恰好包含这些短语"这是如何工作取决于你已经应用于身体领域的分析器。

https://www.elastic.co/guide/en/elasticsearch/reference/5.6/query-dsl-bool-query.html

例如:

{
  "query": {
    "bool": {
      "must": [
        {"match": {"body": "a"}},
        {"match": {"body": "b"}},
        {"match": {"body": "c"}},
        {"match_phrase": {"body": "g h i"}},
        {"match_phrase": {"body": "j k l"}}
      ],
      "should": [
        {"match": {"body": "d"}},
        {"match": {"body": "e"}},
        {"match": {"body": "f"}}
      ],
      "must_not": [
        {"match": {"body": "m"}},
        {"match": {"body": "n"}}
      ]
    }
  }
}