Анализаторы комбинирования 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"
]
}
}
}
}
Спасибо за любую помощь.