我试图弄清楚如何对我的Elastic Search查询进行AND。我尝试了几种不同的变体,但始终遇到解析器错误。
我所拥有的是这样的结构:
{
"title": "my title",
"details": [
{ "name": "one", "value": 100 },
{ "name": "two", "value": 21 }
]
}
我已将
details
定义为映射中的嵌套类型。我想要实现的是一个查询,它与标题的一部分匹配,并且通过明细的name
和value
匹配各种明细。我有以下查询,使我几乎可以到达那里,但我无法弄清楚如何对细节进行
AND
。作为示例,我想查找具有以下特征的任何东西:以下查询仅允许我按一个详细名称/值进行搜索:
"query" : {
"bool": {
"must": [
{ "match": {"title": {"query": titleQuery, "operator": "and" } } },
{
"nested": {
"path": "details",
"query": {
"bool": {
"must": [
{ "match": {"details.name" : "one"} },
{ "range": {"details.value" : { "lte": 100 } } }
]
}
}
} // nested
}
] // must
}
}
第二个问题是,查询标题然后将查询的嵌套部分移到过滤器中会更好吗?
最佳答案
你好亲密!只需在您的外部"nested"
中添加另一个"must"
子句:
POST /test_index/_search
{
"query": {
"bool": {
"must": [
{
"match": {
"title": {
"query": "title",
"operator": "and"
}
}
},
{
"nested": {
"path": "details",
"query": {
"bool": {
"must": [
{"match": {"details.name": "one" } },
{ "range": { "details.value": { "lte": 100 } } }
]
}
}
}
},
{
"nested": {
"path": "details",
"query": {
"bool": {
"must": [
{"match": {"details.name": "two" } },
{ "range": { "details.value": { "lte": 25 } } }
]
}
}
}
}
]
}
}
}
这是一些我用来测试的代码:
http://sense.qbox.io/gist/1fc30d49a810d22e85fa68d781114c2865a7c92e
编辑:哦,第二个问题的答案是"is",尽管如果您使用的是2.0,则问题为changed a little。
关于elasticsearch - ElasticSearch如何与一个嵌套查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33623456/