Elasticsearch Type Filter中的多个类型

时间:2013-11-19 18:06:05

标签: elasticsearch

我有一个像这样的过滤查询

query: {
  filtered: {
    query: {
      bool: {
        should: [{multi_match: {
                    query: @query,
                    fields: ['title', 'content']
                    }
                  },{fuzzy: {
                     content: {
                       value: @query,
                       min_similarity: '1d',
                       }
                 }}]
               }
             },
    filter: {
      and: [
         type: {
            value: @type
          }]
    }}}

如果@type是一个字符串,那么工作正常,但如果@type是一个数组则不起作用。如何搜索多种类型?

3 个答案:

答案 0 :(得分:3)

这很有用,但我对此并不满意:

filter: {
  or: [
    { type: { value: 'blog'} },
    { type: { value: 'category'} },
    { type: { value: 'miscellaneous'} }
  ]
}

我想接受更好的答案

答案 1 :(得分:2)

您可以在搜索请求的网址中轻松指定多种类型,例如如果使用http://localhost:9200/twitter/tweet,user/_search,则type或标题中的_msearchdocumented here

然后由E​​lasticsearch将这些内容添加为过滤器。

此外,由于本文所述原因,您通常希望使用bool组合过滤器:all about elasticsearch filter bitsets

答案 2 :(得分:1)

这对我有用:

在filter参数中,将多个类型查询包装为布尔查询的应该子句

例如

{
  "query": {
    "bool": {
      "must": {
        "term": { "foo": "bar" }
      },
      "filter": {
        "bool": {
          "should": [
            { "type": { "value": "myType" } },
            { "type": { "value": "myOtherType" } }
          ]
        }
      }
    }
  }
}

dadoonet 建议,在Elasticsearch github问题Support multiple types in Type Query