1

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

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

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

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

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

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

因此,当我使用样本集查询标签时,带有id 1and的文档应该匹配。(原因包含and 和conatins 。)id 3id 1"OS""mobile"id 3"OS"

我如何在弹性搜索上做到这一点?

4

2 回答 2

1

试试这个

GET /_search

    {
      "query": {
        "bool": {
          "should": [
            { 
              "terms": 
                { 
                  "tags": ["OS", "opera","mobile"]
                }
            }
          ]
        }
      }
    }
于 2016-06-03T10:20:43.493 回答
0

使用“应该”关键字尝试以下布尔查询。

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

可能需要进一步查询的重要说明:如果您计划搜索包含所有 3 个值(但不是 2 个或仅 1 个标签)的对象,您绝对应该首先阅读Elasticsearch 中的嵌套对象

于 2016-06-01T09:21:59.380 回答