Elasticsearch: подсказка завершения не работает с пробелом Analyzer

Я новичок в поиске Elastic и пытаюсь создать одну демонстрацию подсказки завершения с помощью анализатора пробелов.

Согласно документации Whitespace Analyzer, он разбивает текст на термины всякий раз, когда встречается с пробельным символом. Итак, мой вопрос: работает ли он с подсказкой завершения?

Так что для моего префикса подсказки завершения: "ela", я ожидаю вывод как "Здравствуйте, упругий поиск".

Я знаю, что простое решение для этого состоит в том, чтобы добавить многопольный ввод как:

"suggest": {
         "input": ["Hello","elastic","search"]
 }

Однако, если это решение, то в чем смысл использования анализатора? Имеет ли смысл анализатор в подсказке завершения?

Мое отображение:

{
  "settings": {
    "analysis": {
      "analyzer": {
        "completion_analyzer": {
          "type": "custom",
          "filter": [
            "lowercase"
          ],
          "tokenizer": "whitespace"
        }
      }
    }
  },
  "mappings": {
            "my-type": {
                "properties": {
                    "mytext": {
                        "type": "text",
                        "fields": {
                            "keyword": {
                                "type": "keyword",
                                "ignore_above": 256
                            }
                        }
                    },
                    "suggest": {
                        "type": "completion",
                        "analyzer": "completion_analyzer",
                        "search_analyzer": "completion_analyzer",
                        "max_input_length": 50
                    }
                }
            }
        }
}

Мой документ:

{
    "_index": "my-index",
    "_type": "my-type",
    "_id": "KTWJBGEBQk_Zl_sQdo9N",
    "_score": 1,
    "_source": {
        "mytext": "dummy text",
        "suggest": {
                 "input": "Hello elastic search."
        }
    }
}

Поисковый запрос:

{
    "suggest": {
        "test-suggest" : {
        "prefix" :"ela", 
        "completion" : { 
            "field" : "suggest",
            "skip_duplicates": true
        }
        }
    }
}

Этот поиск не возвращает мне правильный вывод, но если я использую prefix = 'hel', я получаю правильный вывод: "Здравствуйте, упругий поиск".

Вкратце я хотел бы знать, работает ли анализатор пробелов с подсказкой завершения? и если есть способ, можете ли вы предложить мне.

PS: я уже искал эти ссылки, но не нашел полезного ответа.

ElasticSearch подсказка завершения Стандартный анализатор не работает

Какой Elasticsearch Analyzer использовать для этого подсказки завершения?

Я нахожу эту ссылку полезной Word-ориентированной подсказкой завершения (ElasticSearch 5.x). Однако они не используют подсказку завершения.

Заранее спасибо.

Джимми

0 ответов

Подсказчик завершения не может выполнять полнотекстовые запросы, что означает, что он не может возвращать предложения, основанные на словах в середине поля из нескольких слов.

Из самого ElasticSearch:

Причина в том, что FST-запрос отличается от полнотекстового запроса. Мы не можем найти слова нигде внутри фразы. Вместо этого мы должны начать слева от графика и двигаться вправо.

Как вы обнаружили, лучшей альтернативой для подсказки завершения, которая может соответствовать середине полей, является n-граммовый фильтр ребер.

Я знаю, что этому вопросу давно, но пробовали ли вы иметь несколько предложений, одно на основе префикса, а другое на основе регулярного выражения?

Что-то типа

{
    "suggest": {
        "test-suggest-exact" : {
            "prefix" :"ela", 
            "completion" : { 
                "field" : "suggest",
                "skip_duplicates": true
            }
        },
        "test-suggest-regex" : {
            "regex" :".*ela.*", 
            "completion" : { 
                "field" : "suggest",
                "skip_duplicates": true
            }
        }
    }
}

Используйте результаты второй подсказки, когда первая пуста. Хорошо то, что предложения Elasticsearch возвращают содержательные фразы.

Подход на основе Shingle, использующий полный поиск по запросу с последующим агрегированием по условиям поиска, иногда дает неверные фразы, которые контекстуально неверны. Я могу написать больше, если вам интересно.

Другие вопросы по тегам