【问题标题】:Elasticsearch : How to match non existant tagsElasticsearch:如何匹配不存在的标签
【发布时间】:2012-11-06 06:45:45
【问题描述】:

假设我有一组以 a-z 作为键的文档。 我正在触发这个术语查询:

curl -X GET localhost:9200/memphis/pincode/_search?pretty=json -d '{"query":{"term":{"a":"abcd", "b":"wxyz"}}}'

这将返回所有“a”值为 abcd 且“b”值为 wxyz 的文档。 但是,如果我想要所有这样的文档作为回报('a' 的值是 abcd,'b' 的值是 wxyz)或('a' 的值是 abcd 而标签 'b' 没有' t 存在)或(标签 a 不存在且 'b' 的值为 wxyz)。

这可能吗?

我正在使用 ruby​​ 并正在使用“Tire”gem 连接到 elasticsearch。如果我也能得到轮胎的相应语法,那会更有帮助。

提前致谢

-Azitabh

【问题讨论】:

    标签: ruby elasticsearch tire


    【解决方案1】:

    您可以使用 should 子句将 2 个查询包装在 Bool 查询中。

    这意味着命中这两个查询的文档将获得更高的分数。

    http://www.elasticsearch.org/guide/reference/query-dsl/bool-query.html

    【讨论】:

      【解决方案2】:

      我在其他论坛上得到了答案。 放在这里只是为了完整:

      http://www.elasticsearch.org/guide/reference/query-dsl/missing-filter.html

      {
      "query" : {
          "constant_score" : {
              "filter" : {
                  "must" : [
                      {
                          "should": [
                              {
                                  "term": {"a" : "abcd"}
                              },
                              {
                                  "missing": {"field": "a"}
                              }
                          ]
                      },
                      {
                          "should": [
                              {
                                  "term": {"b" : "wxyz"}
                              },
                              {
                                  "missing": {"field": "b"}
                              }
                          ]
                      },
      
                  ]
              }
          }
      }
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-11-07
        • 1970-01-01
        • 1970-01-01
        • 2021-09-03
        相关资源
        最近更新 更多