Elasticsearch анализатор файлов на основе пользовательских файлов - PullRequest
0 голосов
/ 02 апреля 2019

Я используюasticsearch 6 и имею полнотекстовое поле в индексе. Это поле хранит категорию продукта и может принимать только одно из нескольких возможных значений (например, фрукты, листовые овощи и т. Д.). Я хочу проанализировать поле с помощью токенов, указанных в файле.
* Например 1002 *

свежие фрукты -> [фрукты, свежие фрукты]

Есть ли способ использовать пользовательский анализатор с окончательными токенами из файла сопоставления, как указано выше.

1 Ответ

0 голосов
/ 03 апреля 2019

То, что вы ищете, это фильтр токенов синонимов . Вам необходимо создать собственный анализатор, который использовал этот фильтр, чтобы при вводе строки fresh fruit или fruit он генерировал один токен fruit. Вы можете добиться этого, определив анализ в настройках индекса. Создайте пользовательский анализатор, который использует фильтр, а затем примените этот анализатор к полю category, как показано ниже:

PUT my_index
{
  "settings": {
    "index": {
      "analysis": {
        "analyzer": {
          "my_synonym_analyzer": {
            "tokenizer": "standard",
            "filter": [
              "lowercase",
              "custom_synonym"
            ]
          }
        },
        "filter": {
          "custom_synonym": {
            "type": "synonym",
            "synonyms": [
              "fresh fruit, fruit => fruit"
            ],
            //"synonyms_path": "analysis/synonyms.txt"    <---- replace "synonyms" above with this to use file instead of array of synonyms
          }
        }
      }
    }
  },
  "mappings": {
    "_doc": {
      "properties": {
        "category": {
          "type": "text",
          "analyzer": "my_synonym_analyzer"
        }
      }
    }
  }
}

Теперь при поиске fruit или fresh fruit по category документам полей с fruit или fresh fruit будут совпадать. Это связано с тем, что при поиске с упругим полевым поиском по умолчанию используется тот же анализатор для строки поиска, который был применен к полю при индексации, который в этом случае в конечном итоге сводится к fruit в любом случае (fruit или fresh fruit) и, следовательно, документы будут совпадать.

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