При использовании типов данных псевдонимов и синонимов в индексе кажется, что включение синонимов нарушает функциональность поля псевдонимов.
Чтобы воссоздать проблему:
# Create the index
PUT /alias.synonyms
{
"settings": {
"analysis": {
"analyzer": {
"default": {
"tokenizer": "standard",
"filter": [
"my_synonyms"
]
}
},
"filter": {
"my_synonyms": {
"type": "synonym",
"synonyms": [
"big,large"
]
}
}
}
},
"mappings": {
"properties": {
"my_target": {
"type": "text"
},
"my_alias": {
"type": "alias",
"path": "my_target"
}
}
}
}
# Add a document
POST /alias.synonyms/_doc/1
{"my_target":"this sentence has big in it"}
GET /alias.synonyms/_doc/1
# (Search #1) Search for existing synonym word in text field (gets hit)
GET /alias.synonyms/_search
{
"explain": true,
"query": {
"match": {
"my_target": "big"
}
}
}
# (Search #2) Search for non-existing synonym word in text field (gets hit)
GET /alias.synonyms/_search
{
"explain": true,
"query": {
"match": {
"my_target": "large"
}
}
}
# (Search #3) Search for existing non-synonym word in text field (gets hit)
GET /alias.synonyms/_search
{
"explain": true,
"query": {
"match": {
"my_target": "sentence"
}
}
}
# (Search #4) Search for existing synonym word in alias field (no hit, but one was expected)
GET /alias.synonyms/_search
{
"explain": true,
"query": {
"match": {
"my_alias": "big"
}
}
}
# (Search #5) Search for non-existing synonym word in alias field (no hit, but one was expected)
GET /alias.synonyms/_search
{
"explain": true,
"query": {
"match": {
"my_alias": "large"
}
}
}
# (Search #6) Search for existing non-synonym word in alias field (gets hit)
GET /alias.synonyms/_search
{
"explain": true,
"query": {
"match": {
"my_alias": "sentence"
}
}
}
Странно для меня то, что это не просто синоним, который не существует в поле, которое не работает (поиск # 5); поиск «большой» в поле псевдонима также не работает, даже если слово явно указано в документе (поиск № 4).
Выполнение тех же команд, что и выше, но пропуская фильтр синонимов в настройках индекса, возвращает результаты поиска «предложение» (поиск № 3 и № 6) и «большой» (поиск № 1 и № 4) в обоих полях, но не "большой" (поиск # 2 и # 5), как ожидалось.
Что-то не так с вышеуказанной настройкой? Или Elasticsearch просто не оборудован для обработки запросов псевдонимов данных с помощью анализатора синонимов?
В настоящее время используется Elasticsearch 7.0.