Подсказчик фраз Elasticsearch не исправляет два слова

У меня есть следующее сопоставление с моим подсказчиком фраз:

{
   "settings": {
      "analysis": {
         "analyzer": {
            "suggests_analyzer": {
               "tokenizer": "standard",
               "filter": [
                  "lowercase",
                  "asciifolding",
                  "shingle_filter"
               ],
               "type": "custom"
            }
         },
         "filter": {
            "shingle_filter": {
               "min_shingle_size": 2,
               "max_shingle_size": 6,
               "type": "shingle"
            }
         }
      }
   },
   "mappings": {
      "sample_data": {
         "properties": {
            "name": {
               "type": "string",
               "analyzer": "suggests_analyzer"
            }
         }
      }
   }
}

У меня есть "рак легких", "колоректальный рак", "рак молочной железы" индексированные в моем индексе. Но когда я запрашиваю ошибочный запрос, в котором оба слова написаны с ошибками, например «lhng cancar», возвращает нулевые результаты, когда я использую функцию сопоставления. Мой пример запроса выглядит следующим образом.

{
   "suggest": {
      "text": "lhng cancar",
      "simple_phrase": {
         "phrase": {
            "field": "name",
            "size": 5,
            "real_word_error_likelihood": 0.95,
            "max_errors": 0.5,
            "direct_generator": [
               {
                  "field": "name",
                  "suggest_mode": "always",
                  "size": 5

               }
            ],
            "collate": {
               "query": {
                  "inline": {
                     "match_phrase": {
                        "{{field_name}}": "{{suggestion}}"
                     }
                  }
               },
               "params": {
                  "field_name": "name"
               },
               "prune": false
            }
         }
      }
   },
   "size": 0
}

Ответ на приведенный выше запрос:

{
   "took": 17,
   "timed_out": false,
   "_shards": {
      "total": 5,
      "successful": 5,
      "failed": 0
   },
   "hits": {
      "total": 1868381,
      "max_score": 0,
      "hits": []
   },
   "suggest": {
      "simple_phrase": [
         {
            "text": "lhng cancar",
            "offset": 0,
            "length": 11,
            "options": []
         }
      ]
   }
}

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


person Abhilash Bolla    schedule 07.02.2017    source источник
comment
Возможный дубликат ElasticSearch — подсказка фраз   -  person cbuchart    schedule 22.05.2017


Ответы (2)


Вы должны поднять max_errors до 0,8 или больше.

Тот же ответ дан здесь ElasticSearch - Предложение фраз

person fexon    schedule 22.05.2017
comment
это правильный ответ, max_error — это значение с плавающей запятой в диапазоне 0...1.: Источник - person AfikDeri; 28.06.2018

Повышение параметра max_errors: 2 решило мою проблему.

person Abhilash Bolla    schedule 18.01.2018