#elasticsearch #join #search #parent-child
#elasticsearch #Присоединиться #Поиск #родитель-потомок
Вопрос:
Я использую эластичный поиск 7.8.1 и использовал родительско-дочерний метод для индексации документов. Мое требование — выполнять поиск как в родительских, так и в дочерних документах, но возвращать ответ в формате, в котором родительский документ является основным документом, а дочерний документ — полем в родительском документе. т.е
1) If the child matches, I wish to return parent amp; child in a document. I am able to achieve this using has_child and inner_hits.
2) If the parent matches the query, I wish to return parent and child in a document even if the child does not matches. (Not sure how to achieve this)
# This is the parent child relationship mapping in index
*curl -X PUT "localhost:9200/my-index-000001?pretty" -H 'Content-Type: application/json' -d'
{
"mappings": {
"properties": {
"my_id": {
"type": "keyword"
},
"my_join_field": {
"type": "join",
"relations": {
"question": "answer"
}
}
}
}
}
'*
Below is the query I am trying to use, but it does not return the child when the parent matches:
*curl -X POST "localhost:9200/my-index-000001/_search?pretty" -H 'Content-Type: application/json' -d'
{
"query": {
"bool": {
"should": [
{
"has_child": {
"type": "answer",
"query": {
"match": {
"my_id": "4"
}
},
"inner_hits": {
"size": 1
}
}
},
{
"match": {
"my_id": "1"
}
}
]
}
}
}'*
#Родительские документы curl -X ПОМЕЩАЮТ «localhost: 9200/my-index-000001/_doc/1?refresh amp; pretty» -H ‘Content-Type: application/json’ -d’ { «my_id»: «1», «text»: «Это вопрос», «my_join_field»: «вопрос» } ‘ curl -X ПОМЕЩАЕТ «localhost: 9200/my-index-000001 / _doc/2?обновить и красиво» -H ‘Content-Type: application/json’ -d’ { «my_id»: «2», «text»: «Это другой вопрос», «my_join_field»: «вопрос» } ‘
#Дочерние документы curl -X ПОМЕЩАЮТ «localhost: 9200/my-index-000001/_doc/3?routing=1amp;refreshamp; pretty» -H ‘Content-Type: application/json’ -d’ { «my_id»: «3», «text»: «Это ответ», «my_join_field»: { «name»: «answer», «parent»: «1» } } ‘ curl — X ПОМЕСТИТЕ «localhost: 9200/my-index-000001/_doc/4?routing=1amp;refresh amp;pretty» -H ‘Тип содержимого: application/ json’ -d’ { «my_id»: «4», «text»: «Это другой ответ», «my_join_field»: { «name»: «ответ», «parent»: «1» } } ‘
Как я могу выполнить поиск как родительского, так и дочернего элементов, но вернуть дочерний элемент в виде поля в родительском документе. Заранее спасибо.
Комментарии:
1. Пожалуйста, используйте опцию редактирования в вашем вопросе, чтобы добавить информацию. Не используйте комментарии для этого.