Как сгенерировать поисковые подсказки из нескольких слов

Я использую Elasticsearch для создания небольшого поискового приложения и пытаюсь понять, как создать функцию автозаполнения с предложениями из нескольких слов (фраз). У меня он работает ... вроде ...

Я получаю в основном предложения из одного слова, но когда я нажимаю клавишу пробела - предложения убиваются.

Например, если я набираю «быстро», все работает нормально, если я набираю «быстро» - это останавливает появление предложений.

Я использую Edge N Grams и match_phrase_prefix и следую примерам, здесь и здесь, чтобы создать его. из. Для поля _all в match_phrase_prefix и просто использовал include_in_all: false, чтобы отменить все поля, кроме заголовка и содержимого. Я начинаю думать, что это просто потому, что я тестирую небольшой набор данных, а токенизированных терминов просто недостаточно для создания предложений из нескольких слов. Пожалуйста, взгляните на соответствующий код ниже и сообщите мне, где я ошибаюсь, если таковые имеются?

"analysis": {
"filter": {
 "autocomplete_filter": {
  "type": "edge_ngram",
  "min_gram": "1",
  "max_gram": "20",
  "token_chars": [
    "letter",
    "digit"
  ]
 }
},
"analyzer": {
  "autocomplete": {
    "type": "custom",
    "tokenizer": "whitespace",
    "filter": [
       "lowercase",
       "asciifolding",
       "autocomplete_filter"
    ]     
  },
  "whitespace_analyzer": {
    "type": "custom",
    "tokenizer": "whitespace",
    "filter": [
      "lowercase",
      "asciifolding"
      ]

person user3125823    schedule 30.04.2016    source источник


Ответы (1)


попробуйте keyword tokenizer

"autocomplete": {
    "type": "custom",
           "filter": [
       "lowercase",
       "asciifolding",
       "autocomplete_filter"
    ],
 "tokenizer": "keyword"     
  }

для справки ключевое слово токенизатора сопоставления elasticsearch, чтобы избежать разделения токенов и разрешите использование подстановочного знака

Поскольку по умолчанию это стандартный анализатор, который разбивается на пробелы, вы можете проверять свои токены, например curl 'localhost:9200/test/_analyze?pretty=1&analyzer=my_edge_ngram_analyzer' -d 'FC Schalke 04' reference https://www.elastic.co/guide/en/elasticsearch/reference/current/analysis-edgengram-tokenizer.html

person Dhruv Pal    schedule 30.04.2016