【问题标题】:Check against list field in elastic search检查弹性搜索中的列表字段
【发布时间】:2016-06-01 08:54:24
【问题描述】:

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

_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"id 3 conatins "OS"。)

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

【问题讨论】:

  • 你解决成功了吗?或者需要什么帮助?

标签: elasticsearch elasticsearch-dsl


【解决方案1】:

试试这个

GET /_search

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

【讨论】:

    【解决方案2】:

    使用“应该”keyword 尝试以下布尔查询。

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

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

    【讨论】:

      猜你喜欢
      • 2017-07-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-11-03
      • 1970-01-01
      • 2016-10-04
      • 1970-01-01
      • 2017-08-25
      相关资源
      最近更新 更多