检查弹性搜索中的列表字段

时间:2016-06-01 08:54:24

标签: elasticsearch elasticsearch-dsl

我有字段值作为列表。例如

_id = 1
tags = ["IT", "mobile", "OS"]

_id = 2
tags = ["Mac", "fast", "laptop"]

_id = 3
tags = ["IT", "android", "OS"]

我有一个列表来检查标记字段。

sample = ["OS", "opera", "mobile"]

因此,当我使用示例集查询代码时,id 1id 3的文档应匹配。(原因id 1包含"OS""mobile"以及{{ 1}} conatins id 3。)

如何在弹性搜索中执行此操作?

2 个答案:

答案 0 :(得分:1)

试试这个

GET /_search

    {
      "query": {
        "bool": {
          "should": [
            { 
              "terms": 
                { 
                  "tags": ["OS", "opera","mobile"]
                }
            }
          ]
        }
      }
    }

答案 1 :(得分:0)

使用" should"尝试以下布尔查询keyword

GET /_search
{
  "query": {
    "bool": {
      "should": [
        { "match": { "tags": "OS" }},
        { "match": { "tags": "opera" }},
        { "match": { "tags": "mobile" }} 
      ]
    }
  }
}

对于进一步的查询可能是一个重要的注释:如果您打算搜索包含所有3个值(而不是2个或仅1个标记)的对象,那么您首先应该在Elasticsearch中阅读nested objects