Эластичный поисковый запрос для пары столбцов имя / значение
У нас есть один документ в упругом поиске с несколькими разделами пары имя / значение, и мы хотим получить значение только на основе значения столбца имени.
"envelopeData": {
"envelopeName": "Bills",
"details": {
"detail": [
{
"name": "UC_CORP",
"value": "76483"
},
{
"name": "UC_CYCLE",
"value": "V"
}
Мы ожидаем только 76483 как результат, основанный на имени, равном UC_CORP
1 ответ
Решение
Если поле envelopeData.details.detail имеет вложенный тип, вы можете выполнить запрос на совпадение для нужного имени на вложенном пути и использовать inner_hits, чтобы получить только значение.
Сопоставьте поле envelopeData.details.detail как вложенное (если не вложенное):
PUT stackru
{
"mappings": {
"_doc": {
"properties": {
"envelopeData.details.detail": {
"type": "nested"
}
}
}
}
}
Затем вы можете выполнить следующий запрос, чтобы получить значение с помощью inner_hits:
GET stackru/_search
{
"_source": "false",
"query": {
"nested": {
"path": "envelopeData.details.detail",
"query": {
"match": {
"envelopeData.details.detail.name.keyword": "UC_CORP"
}
},
"inner_hits": {
"_source": "envelopeData.details.detail.value"
}
}
}
}
какие выводы:
{
"_index": "stackru",
"_type": "_doc",
"_id": "W5GUW2gB3GnGVyg-Sf4T",
"_score": 0.6931472,
"_source": {},
"inner_hits": {
"envelopeData.details.detail": {
"hits": {
"total": 1,
"max_score": 0.6931472,
"hits": [
{
"_index": "stackru",
"_type": "_doc",
"_id": "W5GUW2gB3GnGVyg-Sf4T",
"_nested": {
"field": "envelopeData.details.detail",
"offset": 0
},
"_score": 0.6931472,
"_source": {
"value": "76483" -> Outputs value only
}
}
]
}
}
}
}