elasticsearch查询包含多个唯一值的字段

时间:2014-07-13 07:47:10

标签: elasticsearch

我有一个字段,其中包含如下值:

sourceTypes: ["book", cartoon"]

如何查询sourceTypes都是的项目?

{
  "query": {
    "constant_score": {
      "filter": {
        "and": [
          {
            "script": {
              "script": "doc['sourceTypes'].values[0] = \"cartoon\""
            }
          },
          {
            "script": {
              "script": "doc['sourceTypes'].values[1] = \"book\""
            }
          }
        ]
      }
    }
  }
}

通过上面的查询,我得到了这个: 查询失败[无法执行主查询]];嵌套:UnsupportedOperationException [修改列表操作未实现]; }]

并使用此查询:

{
  "query": {
    "bool": {
      "must": [
        {
          "term": {
            "feeds.sourceTypes": "[\"cartoon\", \"book\"]"
          }
        }
      ]
    }
  }
}

我没有错误但返回null。

更新:我发现这对我有用。

{
  "query": {
    "match_phrase": {
      "sourceTypes": "cartoon book"
    }
  }
}

有更高效的方法吗?

更新以添加映射:

"sourceTypes": {
    "type": "string"
}

和部分文件:

sourceTypes: [
    "book",
    "cartoon"
]

我真正想做的是获取sourceTypes不相同的所有文档。所以如果它是书和杂志,我想要它。如果是书,书,我不想要它。

谢谢!

1 个答案:

答案 0 :(得分:0)

据我了解您的问题,您有一个要查询的数组字段 sourceTypes 。如果字段为 not_analyzed ,则可以使用字词查询。示例查询可能如下所示:

  "query" : { 
    "bool" : {
      "must" : [
        {
          "term" : {"sourceTypes" : "book"}
        }, 
        { 
          "term" :{"sourceTypes" : "cartoon"}
        }
      ], 
      "must_not" : [], 
      "should" :   []
    }
  }

上述查询将确保仅返回 sourceTypes 字段同时包含图书卡通的文档。 我希望它能解决你的问题。如果不。请告诉我。

由于