Сценарий Elasticsearch со значением из другого документа
Представьте, что у меня есть два типа документов:
- Клиенты - содержит информацию, такую как регион, язык и т. Д.)
- Покупки - содержат информацию об отдельных покупках).
Между покупателями / покупателями существуют отношения между родителями и детьми.
Мне нужно создать отчет, который будет содержать все покупки, которые соответствуют определенным критериям фильтра, но каждая строка должна также содержать некоторые данные поиска из документа клиента (например: локаль клиента). Я знаю, что один из способов сделать это состоит в том, чтобы сгладить данные и поместить эти поля непосредственно в документ о закупках. Я хотел бы знать, есть ли способ, которым ElasticSearch мог бы заполнить эти поля автоматически для меня (возможно, некоторая магия поиска по сценариям?) Вместо этого.
1 ответ
Нет доступа к полям из parent/child
используя любой вид сценария, потому что это совершенно другой документ. Было бы очень дорого получить доступ к родителю из контекста ребенка и наоборот.
Внутренние хиты будут делать то, что вам нужно:
PUT test
{
"mappings": {
"Customer": {},
"Purchase": {
"_parent": {
"type": "Customer"
}
}
}
}
PUT test/Customer/1
{
"firstName": "John",
"lastName": "Doe"
}
PUT test/Purchase/2?parent=1
{
"price": 100
}
GET test/Purchase/_search
{
"query":{
"bool":{
"must":[
{
"range":{
"price":{
"gte":10
}
}
},
{
"has_parent":{
"type":"Customer",
"inner_hits":{},
"query":{
"match_all":{}
}
}
}
]
}
}
}