Я пытаюсь использовать Elastic Search, и я застрял, пытаясь запросить вложенный объект.
В основном мой объект имеет следующий формат
{
"name" : "Some Name",
"field2": [
{
"prop1": "val1",
"prop2": "val2"
},
{
"prop1": "val3",
"prop2":: "val4"
}
]
}
Сопоставление, которое я использовал для вложенного поля, выглядит следующим образом.
PUT /someval/posts/_mapping
{
"posts": {
"properties": {
"field2": {
"type": "nested"
}
}
}
}
Скажем, теперь я вставляю элементы для /field/posts/1 и /field/posts/2 и т. д. У меня есть k значений для field2.prop1, и я хочу запрос, который отсортирует сообщения на основе наибольшего совпадения field2.prop1 среди K ценности у меня есть. Какой будет соответствующий запрос для этого. Также я попробовал простой фильтр, но даже он не работает правильно.
GET /someval/posts/_search
{
"query": {
"filtered": {
"query": {
"match_all": {}
}
},
"filter" : {
"nested" : {
"path" : "field2",
"filter" : {
"bool" : {
"must" : [
{
"term" : {"field2.prop1" : "val1"}
}
]
}
},
"_cache" : true
}
}
}
}
Приведенный выше запрос должен соответствовать как минимум первому сообщению. Но он не возвращает совпадения. Может ли кто-нибудь помочь прояснить, что здесь не так?