#elasticsearch #elasticsearch-highlight
Вопрос:
Я сталкиваюсь с этой проблемой в эластичном поиске, которую я не могу объяснить. Иногда появляется подсветка, но в других случаях этого не происходит. Ниже приведен способ воспроизвести его с помощью кибаны. Мой индекс и сопоставление —
PUT test_index
{
"mappings": {
"doc": {
"properties": {
"type": {
"type": "text"
},
"packages": {
"type": "nested",
"include_in_root": true,
"properties": {
"amount": {
"type": "keyword",
"fields": {
"raw": {
"type": "double"
}
}
},
"rem_amount": {
"type": "keyword",
"fields": {
"raw": {
"type": "double"
}
}
}
}
}
}
}
}
}
Вставьте примеры данных
PUT test_index/doc/1
{
"id": 1,
"type": "data",
"packages" : [
{
"amount": "100.0",
"rem_amount": "100.5"
}
]
}
Следующие запросы(Запрос 1 и Запрос 2) не возвращают выделение. Пожалуйста, обратите внимание, что у меня есть более широкий запрос. Я вставляю сюда только часть этого.
Запрос 1: require_field_match: true и поля: [«пакеты.*»]. Вывод — Без подсветки
GET test_index/_search
{
"query": {
"query_string": {
"query": "100",
"fields": ["packages.*"],
"type":"phrase_prefix"
}
},
"min_score": 0.000001,
"highlight" : {
"require_field_match": true,
"fields": {
"*": {
"type": "plain"
}
}
}
}
Query 2: require_field_match: false and fields: [«packages.*»]. Output — No highlight
GET test_index/_search
{
"query": {
"query_string": {
"query": "100",
"fields": ["packages.*"],
"type":"phrase_prefix"
}
},
"min_score": 0.000001,
"highlight" : {
"require_field_match": false,
"fields": {
"*": {
"type": "plain"
}
}
}
}
Only in the case where require_field_match: false and I REMOVE line «fields»: [«packages.*»] is when the highlights appear:
Query 3
GET test_index/_search
{
"query": {
"query_string": {
"query": "100",
"type":"phrase_prefix"
}
},
"min_score": 0.000001,
"highlight" : {
"require_field_match": false,
"fields": {
"*": {
"type": "plain"
}
}
}
}
highlighted block:
"highlight": {
"packages.rem_amount": [
"<em>100.5</em>"
],
"packages.amount": [
"<em>100.0</em>"
]
}
Кто-нибудь может, пожалуйста, объяснить такое поведение? Установка require_field_match как false также должна была вернуть выделение в запросе 2. Каким образом столбец «поля» и «require_field_match» влияют на это поведение?