Когда я создаю индекс с поисковым анализатором по умолчанию, имеющим фильтр синонимов, как показано ниже
{
"settings": {
"analysis": {
"analyzer": {
"default": {
"tokenizer": "whitespace",
"filter": [
"lowercase"
]
},
"default_search": {
"tokenizer": "whitespace",
"filter": [
"lowercase",
"my_synonym_filter"
]
}
},
"filter": {
"my_synonym_filter": {
"type": "synonym",
"synonyms": [
"dns => domain name service",
"wi fi => wifi"
]
}
}
}
}
}
'
, и запускаю запрос
curl -X GET "localhost:9200/synonym_filter_check/_analyze?pretty" -H 'Content-Type: application/json' -d'
{
"text" : "wi fi",
"analyzer": "default_search"
}
'
, я ожидаю, что вход сначала будет токенизирован на пробел, разбивая wi fi
на wi
и fi
, которые затем должны быть переданы в фильтр синонимов. Поскольку фильтр синонимов не имеет сопоставления для wi
и fi
, он не должен ничего отображать здесь, и в конечном выводе должно быть два токена с именами wi
и fi
. Тем не менее, в результате получается
{
"tokens" : [ {
"token" : "wifi",
"start_offset" : 0,
"end_offset" : 5,
"type" : "SYNONYM",
"position" : 0
} ]
}
wifi
- это значение сопоставления ключа wi fi
в моем сопоставлении синонимов. Может кто-нибудь помочь мне понять, почему это происходит?