将查询与多个值匹配

时间:2014-10-01 05:29:04

标签: json elasticsearch

我有一个值列表,我希望在product_code字段中包含任何这些值的所有文档。

我尝试了这个,但即使它没有出错,它也只给了我一个文件:

"query": {
  "match": {
    "product_code": {
      "query": ["ABC 4", "ABC 5"]
    }
  }
}

所以我基本上都在寻找terms过滤器的功能,但需要进行分析。

我当然能做到:

"bool": {
  "should": [
    {
      "query": {
        "match": {
          "product_code": "ABC 4"
        }
      }
    },
    {
      "query": {
        "match": {
          "product_code": "ABC 5"
        }
      }
    }
  ]
}

但是对于长列表而言,这会变得相当冗长。

product_code的定义如下:

"product_code": {
  "type": "string",
  "analyzer": "product_code",
}

使用 product_code 分析器:

"product_code": {
  "type": "custom",
  "filter": [
    "lowercase",
    "trim"
  ],
  "tokenizer": "keyword"
}

2 个答案:

答案 0 :(得分:1)

terms AFAIK的match查询等效。另一种选择是query_string,它不那么详细:

{
  "query": {
    "query_string": {
      "default_field": "product_code",
      "query": "\"ABC 4\" OR \"ABC 5\""
    }
  }
}

http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/query-dsl-query-string-query.html

答案 1 :(得分:0)

我可能会遗漏一些东西,但是怎么样:

{
    "constant_score" : {
        "filter" : {
            "terms" : { "product_code" : ["ABC 4", "ABC 5"]}
        }
    }
}

这可能是您正在寻找的吗?