[英]ElasticSearch How to AND a nested query
我想弄清楚如何與我的彈性搜索查詢。 我嘗試了幾種不同的變體,但總是遇到解析器錯誤。
我擁有的是這樣的結構:
{
"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
}
}
作為第二個問題,查詢標題然后將查詢的嵌套部分移動到過濾器中會更好嗎?
你離得太近了! 只需在您的外部"must"
添加另一個"nested"
子句:
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
編輯:哦,您的第二個問題的答案是“是”,但如果您使用的是 2.0,事情會發生一些變化。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.