Анализаторы комбинирования Elasticsearch: n-граммы и синонимы

Я новичок в asticsearch и пытаюсь объединить две вещи...

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

"mappings": {
      "post": {
        "properties": {
          "title": {
            "type": "text",
            "analyzer": "autocomplete"
          }
        }
      }
    },
    "settings": {
      "analysis": {
        "filter": {
          "autocomplete_filter": {
            "type": "edge_ngram",
            "min_gram": 1,
            "max_gram": 20
          }
        },
        "analyzer": {
          "autocomplete": {
            "type": "custom",
            "tokenizer": "standard",
            "filter": [
              "lowercase",
              "autocomplete_filter"
            ]
          }
        }
      }
    }

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

Скажем, у меня есть два документа. Один содержит "леброн", а другой - "Кобе". Прямо сейчас, если я запрашиваю "lebr"... появляется "lebron", и я хочу сохранить это поведение. Однако я хотел бы добавить "Кобе" в качестве синонима "Леброн". Поэтому, если я запрашиваю полное слово "леброн", то возвращаются и "кобэ", и "леброн". Возможно ли такое поведение?

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

 "mappings": {
      "post": {
        "properties": {
          "title": {
            "type": "text",
            "analyzer": "autocomplete",
            "fields": {
                "raw": {
                    "type": "text",
                    "analyzer": "synonym"
                }
            }
          }
        }
      }
    },
    "settings": {
      "analysis": {
        "filter": {
          "autocomplete_filter": {
            "type": "edge_ngram",
            "min_gram": 1,
            "max_gram": 20
          },
           "synonym" : {
            "type" : "synonym",
            "synonyms" : [
                "LeBron, Kobe",
                "Lebron => Kobe"
            ]
        }
        },
        "analyzer": {
          "autocomplete": {
            "type": "custom",
            "tokenizer": "standard",
            "filter": [
              "lowercase",
              "autocomplete_filter"
            ]
          },
          "synonym": {
            "type": "custom",
            "tokenizer": "standard",
            "filter": [
              "lowercase",
              "synonym"
            ]
          }
        }
      }
    }

Спасибо за любую помощь.

0 ответов

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