Выделение совпадающих результатов на всех полях - PullRequest
8 голосов
/ 27 ноября 2011

Я хочу, чтобы сопоставленные результаты были выделены. Это работает для меня, если я упоминаю имя поля и возвращает выделенный текст, однако, если я задаю поле как «_all», оно не возвращает никакого значения. Это работает для меня:

        curl -XGET "http://localhost:9200/my_index/my_type/_search?q=stackoverflow&size=999" -d '{
        "highlight":{
                    "fields":{
                             "my_field":{}
                    }
        }
}'

Возвращает ожидаемое значение следующим образом: [highlight] => stdClass Object ([my_field] => Array ([0] => stackoverflow - лучший сайт для технарей))

Но когда я даю это:

        curl -XGET "http://localhost:9200/my_index/my_type/_search?q=stackoverflow&size=999" -d '{
        "highlight":{
                    "fields":{
                             "_all":{}
                    }
        }
}'

Я получаю нулевое значение / без результата.

[highlight] => stdClass Object ( [_all] => Array () )

Как заставить его работать на любом поле, чтобы мне не приходилось упоминать имя поля?

Ответы [ 4 ]

27 голосов
/ 16 мая 2014

Чтобы избежать необходимости добавлять _all в качестве сохраненного поля в вашем индексе

Альтернативное быстрое исправление: используйте * вместо _all:

curl -XGET "http://localhost:9200/my_index/my_type/_search?q=stackoverflow&size=999" -d '{
  "highlight":{
    "fields":{
      "*":{}
    }
  }
}'
16 голосов
/ 18 декабря 2015

Если вы используете ES 2.x, вам нужно установить false для параметра require_field_match из-за изменений, сделанных , из документа

Значение по умолчанию дляпараметр require_field_match изменился с false на true, что означает, что по умолчанию маркеры будут учитывать только те поля, которые были запрошены.

Это означает, что при запросе поля _all при попытке выделить любойПоле, отличное от _all, не будет содержать выделенных фрагментов.

"highlight": {
    "fields": {
      "*": {}
    },
    "require_field_match": false
 }
5 голосов
/ 05 декабря 2011

Вам необходимо отобразить поле _all как сохраненное.Отображение ниже должно сделать свое дело.Обратите внимание, что это добавит к размеру индекса.

{
  "my_type": {
      "_all": {
        "enabled": true,
        "store": "yes"
      }
  }}
0 голосов
/ 21 декабря 2011

В этой библиотеке есть функции подсветки запросов, включая подсветку по всем полям. В README объясняется, как создать индекс эластичного поиска с сохраненным полем _all и т. Д .: https://github.com/niranjan-uma-shankar/Elasticsearch-PHP-class

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