我有一个字段,其中包含如下值:
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不相同的所有文档。所以如果它是书和杂志,我想要它。如果是书,书,我不想要它。
谢谢!
答案 0 :(得分:0)
据我了解您的问题,您有一个要查询的数组字段 sourceTypes 。如果字段为 not_analyzed ,则可以使用字词查询。示例查询可能如下所示:
"query" : {
"bool" : {
"must" : [
{
"term" : {"sourceTypes" : "book"}
},
{
"term" :{"sourceTypes" : "cartoon"}
}
],
"must_not" : [],
"should" : []
}
}
上述查询将确保仅返回 sourceTypes 字段同时包含图书和卡通的文档。 我希望它能解决你的问题。如果不。请告诉我。
由于