Завершение Elasticsearch: странное поведение при нескольких совпадениях в документе

Когда я использую тип завершения внутри предложения, как описано в документации ElasticSearch (https://www.elastic.co/guide/en/elasticsearch/reference/6.7/search-suggesters-completion.html), мне не удается найти все подходящие слова ( Я получаю только одно подходящее слово в документе)

Я тестирую следующие команды на моем ElasticSearch 6.7.2 (который на данный момент является последним, доступным на AWS):

Удаление индекса, если он существует

curl http://localhost:9200/test -H 'Content-Type: application/json' -X DELETE

Создание индекса

curl http://localhost:9200/test -H 'Content-Type: application/json' -X PUT -d '
{
  "mappings": {
    "page": {
      "properties": {
        "completion_terms": {
          "type": "completion"
        }
      }
    }
  }
}
'

Индексирование документа

curl http://localhost:9200/test/_doc/1 -H 'Content-Type: application/json' -X PUT -d '
{
"completion_terms": ["restaurant", "restauration", "réseau"]
}'

Убедитесь, что документ существует

curl http://localhost:9200/test/_doc/1 -H 'Content-Type: application/json'

Используйте завершение

curl -X GET "localhost:9200/test/_search?pretty=true" -H 'Content-Type: application/json' -d'
{
  "_source": ["suggestExact"],
  "suggest": {
      "suggestExact" : {
          "prefix" : "res",
          "completion" : {
              "field" : "completion_terms"
          }
      }
  }
}
'

Результат:

{
  "took" : 6,
  "timed_out" : false,
  "_shards" : {
    "total" : 1,
    "successful" : 1,
    "skipped" : 0,
    "failed" : 0
  },
  "hits" : {
    "total" : 0,
    "max_score" : 0.0,
    "hits" : [ ]
  },
  "suggest" : {
    "suggestExact" : [
      {
        "text" : "res",
        "offset" : 0,
        "length" : 3,
        "options" : [
          {
            "text" : "restaurant",
            "_index" : "test",
            "_type" : "page",
            "_id" : "1",
            "_score" : 1.0,
            "_source" : { }
          }
        ]
      }
    ]
  }
}

Я хочу получить ВСЕ подходящие слова (здесь я получаю не более одного результата на документ)

В примере отсутствуют слова «реставрация» и «реставрация».

Я делаю что-то неправильно ?


person Christophe Blin    schedule 22.07.2019    source источник


Ответы (1)


После многих поисков я обнаружил, что это предполагаемое поведение (то есть «предлагать документы» вместо «предлагать термины»).

В частности, см. https://github.com/elastic/elasticsearch/issues/31738.

Однако мне все еще не удается добиться «предложения условий» даже с помощью термина «подсказчик», который кажется правильным (https://www.elastic.co/guide/en/elasticsearch/reference/6.7/search-suggesters-term.html)

person Christophe Blin    schedule 23.07.2019