Отсутствует текст из выделенного текста Elasticsearch, когда поле содержит восклицательный знак - PullRequest
0 голосов
/ 14 февраля 2020

При поиске текста и запросе запроса результатов выделите, если в соответствующем поле документа содержится восклицательный знак, то возвращенный подсвеченный текст не содержит часть текста, которая содержит восклицательный знак

Elasticsearch версия 7.1. 1

документ: { "name" : "Yahoo! Inc [Please refer to Altaba Inc and Verizon Communications Inc]"} поиск с выделением для подстановочного знака "in c"

ожидается: выделенный текст должен быть:

"Yahoo! <em>Inc</em> [Please refer to Altaba <em>Inc</em> and Verizon Communications <em>Inc</em>]"

актуально:"Yahoo!" отсутствует в ответе. Получил:

"<em>Inc</em> [Please refer to Altaba <em>Inc</em> and Verizon Communications <em>Inc</em>]"

Я думаю, это как-то связано с! отметка. Если я удаляю это, тогда все в порядке.

Шаги для воспроизведения:

Добавить документ в новый индекс

POST test/_doc/ { "name" : "Yahoo! Inc [Please refer to Altaba Inc and Verizon Communications Inc]" }

без других настроек / отображение

Выполнить запрос

GET test/_search { "query": { "bool": { "should": [ { "wildcard": { "name": { "wildcard": "inc*" } } } ] } }, "highlight": { "fields": { "name" : {} } } }

Получены следующие результаты:

"hits" : [ { "_index" : "test", "_type" : "_doc", "_id" : "511tP3ABoqekxkoUshVf", "_score" : 1.0, "_source" : { "name" : "Yahoo! Inc [Please refer to Altaba Inc and Verizon Communications Inc]" }, "highlight" : { "name" : [ "<em>Inc</em> [Please refer to Altaba <em>Inc</em> and Verizon Communications <em>Inc</em>]" ] } } ]

ожидаемое выделение:

"Yahoo! <em>Inc</em> [Please refer to Altaba <em>Inc</em> and Verizon Communications <em>Inc</em>]"

1 Ответ

1 голос
/ 14 февраля 2020

Это ожидаемое поведение, поскольку по умолчанию выделение Elasticsearch возвращает часть искомого текста (фрагменты), см .: https://www.elastic.co/guide/en/elasticsearch/reference/7.1/search-request-highlighting.html#unified -highlighter

! а также . считаются концом предыдущего предложения, и выделение не возвращает этот фрагмент.

В моем случае искомый текст представлял имя, которое имело небольшую длину текста, и добавляя "number_of_fragments" : 0, я принудительно выделяю выделение вернуть все поле документа.

"highlight": {
  "fields": {
     "name" : {"number_of_fragments" : 0}
  }
}

так же, как: https://github.com/elastic/elasticsearch/issues/52333

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...