Предложение по завершению поиска Elasticsearch: возможна ли настоящая токенизация? - PullRequest
0 голосов
/ 06 марта 2019

Как указано здесь поле в Elasticsearch, определенное как тип «завершение» вместе с определенным анализатором + токенизатором, сначала разделяется в соответствии с базовой логикой этих частей, а затем снова «сшивается» вместе,Однако я очень недоволен этим поведением.

Это моя текущая настройка сопоставления (отрывок):

"mappings": {
    "movie": {
      "properties": {
        "title": {
          "analyzer": "standard",
          "fields": {
            "autocomplete": {
              "type": "completion"
              "analyzer": "whitespace",
            }
          },
          "type": "string"
        }
      }
    }
}

Давайте возьмем фильм с названием Harry Potter, например:

Когда я ввожу префикс Har, я получаю предложение Harry Potter.Когда я вместо этого ввожу Pot, я вообще ничего не получаю, потому что отдельные токены Harry и Potter были сшиты вместе в Harry Potter сразу после анализа / токенизации.

Теперь мне нужно следующее поведение: когда я введу Pot, я бы хотел, чтобы средство предложения завершения вернуло Potter.Не Harry Potter, а просто Potter.Это как-то возможно?Внимание: мне даже не нужна ссылка на документ, который создал предложение.Поэтому, если есть возможность выбросить все сгенерированные токены в банк, а затем получить оттуда предложения, это было бы здорово (из-за некоторых других вещей, которые я должен сделать).

1 Ответ

0 голосов
/ 06 марта 2019

Я делаю нечто очень похожее, используя токенайзер edge_ngram.Вот официальная документация

Ваши настройки должны включать что-то вроде:

{
  "settings" : {
    "index" : {
      "number_of_shards" : "5",
      "analysis" : {
        "analyzer" : {
          "autocomplete": {
            "type": "custom",
            "tokenizer": "autocomplete",
            "filter": [
                "lowercase"
            ]
          }
        },
        "tokenizer": {
          "autocomplete": {
            "type": "edge_ngram",
            "min_gram": 3,
            "max_gram": 20,
            "token_chars": [
              "letter",
              "digit"
            ]
          }
        }
      }
    }
  }
}

, и ваше отображение должно быть уточнено так, чтобы "analyzer": "autocomplete«

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