Elasticsearch Предложить + Синонимы + нечеткость - PullRequest
0 голосов
/ 25 февраля 2019

Я ищу способ реализовать автоматическое предложение с помощью синонимов и нечеткости

Например, когда пользователь пытался выполнить поиск "replce ar" В моем списке синонимов есть ar => аудиозапись

Таким образом, результат должен включать элементы, соответствующие изменяющейся аудиозаписи, заменяющей аудиозапись и т. Д.,

Здесь нам нужна нечеткость, поскольку имеется опечатка «заменить» (в тексте поиска пользователя) Синонимыдля сопоставления ar => аудиозаписи Автоматическое предложение с шаблоном регулярных выражений.

Возможно ли реализовать все три функции в одном поле?

Редактировать: регулярное выражение + нечеткое просто выдает ошибку.Я не очень хорошо объяснил мою потребность в регулярных выражениях.Итак, мне нужен Regex для частичного поиска слова («энциклопедический» содержит «цикло»).

Теперь, после изучения , какие варианты у меня есть для этой цели, направив меня к NGram Tokenizer и просмотрев другие подсказки, я обнаружил, что, возможно, Предложение фразы действительно то, что я ищу, поэтому я попробую это и расскажу вам.

1 Ответ

0 голосов
/ 26 февраля 2019

Да, вы можете использовать синонимы, а также нечеткость для предложений.Синонимы обрабатываются путем добавления фильтра синонимов в ваш анализатор языков и добавления этого фильтра в анализатор.Затем, когда вы создаете отображение полей для полей, которые вы хотите использовать для предложений, вы назначаете этот анализатор этому полю.

Что касается нечеткости, которая происходит во время запроса.Большинство текстовых запросов поддерживают параметр fuzziness, который позволяет указать, сколько исправлений вы хотите разрешить.Значение по умолчанию auto регулирует количество исправлений в зависимости от того, какой длительный срок, поэтому обычно это лучше.

Настройка условного анализа ( ссылка на синоним_графа )

{
  "analysis": {
    "filter": {
      "synonyms": {
        "type": "synonym_graph",
        "expand": "false",
        "synonyms": [
          "ar => audio record"
        ]
      }
    },
    "analyzer": {
      "synonyms": {
        "tokenizer": "standard",
        "type": "custom",
        "filter": [
          "standard",
          "lowercase",
          "synonyms"
        ]
      }
    }
  }
}

Условное отображение поля ( Анализатор + ссылка на отображение )

(Обратите внимание, что анализатор соответствует имени анализатораопределено выше)

{
  "properties": {
    "suggestion": {
      "type": "text",
      "analyzer": "synonyms"
    }
  }
}

Условный запрос

{
  "query": {
    "match": {
      "suggestion": {
        "query": "replce ar",
        "fuzziness": "auto",
        "operator": "and"
      }
    }
  }
}

Имейте в виду, что существует несколько различных вариантов предложений ,поэтому в зависимости от того, какую опцию вы используете, вам может потребоваться настроить способ отображения поля или даже добавить другой анализатор токенов в анализатор.Но анализаторы просто состоят из серии токен-фильтров, поэтому вы можете обычно комбинировать любые токен-фильтры, которые вам нужны для достижения вашей цели.Просто убедитесь, что вы понимаете, что делает каждый фильтр, и вы получите фильтры в правильном порядке.

Если вы застряли в какой-то части этого процесса, просто задайте другой вопрос с конкретной проблемой, с которой вы столкнулись.Удачи!

...