【问题标题】:How to perform AND condition in elasticsearch query?如何在弹性搜索查询中执行 AND 条件?
【发布时间】:2016-07-20 20:47:54
【问题描述】:

我有以下查询,我想在范围过滤器中指定的日期范围内查询 ID“abc_12-def”的索引名。

但下面的查询也在获取不同 ID 的值(例如:abc_12-edf、abc_12-pgf 等)并且不在日期范围内。关于如何在这里给出 AND 条件的任何建议?谢谢。

curl -XPOST 'localhost:9200/indexname/status/_search?pretty=1&size=1000000' -d '{
"query": {
"filtered" : {
  "filter": [ 
    { "term":  { "ID": "abc_12-def" }}, 
    { "range": { "Date": { "gte": "2015-10-01T09:12:11", "lte" : "2015-11-18T10:10:13" }}} 
  ]
  }
  }
  }'

【问题讨论】:

  • 你的id字段analyzed??
  • 你能解释一下这是什么意思吗?
  • 使用GET /index_name/type_name/_mapping检查映射并指定问题。
  • 我认为没有分析。
  • 请分享有问题的映射。默认情况下,所有字符串字段都是analyzed

标签: json elasticsearch


【解决方案1】:

您需要将Bool query 用于AND aka MUST 条件

{
  "query": {
    "bool": {
      "must": [
        {
          "term": {
            "ID": "abc_12-def"
          }
        },
        {
          "range": {
            "Date": {
              "gte": "2015-10-01T09:12:11",
              "lte": "2015-11-18T10:10:13"
            }
          }
        }
      ]
    }
  }
}

此外,默认情况下,所有字段都使用standard analyzer 进行分析,这意味着 abc_12-def 被标记为 [abc_12, def]。 term query 不分析字符串。

如果您正在寻找完全匹配,您应该将该字段标记为not_analyzed。这里解释了如何将其映射为not_analyzed

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-09-12
    • 2018-04-14
    • 1970-01-01
    • 2017-09-07
    • 2015-09-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多