У меня есть индекс со следующим полем:
myField: {
type: "text",
fields: {
keyword: {
type: "keyword",
ignore_above: 256
},
keyword_lowercase: {
type: "text",
analyzer: "lowercase_keyword_analyzer",
fielddata: true
}
},
analyzer: "autocomplete_analyzer",
search_analyzer: "autocomplete_search_analyzer"
},
Анализаторы:
lowercase_keyword_analyzer: {
filter: [
"lowercase",
"asciifolding"
],
type: "custom",
tokenizer: "keyword"
},
autocomplete_search_analyzer: {
filter: [
"lowercase",
"asciifolding"
],
type: "custom",
tokenizer: "standard"
},
autocomplete_analyzer: {
filter: [
"lowercase",
"asciifolding",
"autocomplete_edge_ngram"
],
type: "custom",
tokenizer: "standard"
}
У меня есть документ со значением: L'OCCITANE
A Запрос MATCH:
"query": {
"bool": {
"should": [
{
"match": {
"myField.keyword_lowercase": {
"query": "l’occitane"
}
}
}]
}
}
Находит его, однако запрос TERM:
"query": {
"bool": {
"should": [
{
"term": {
"myField.keyword_lowercase": {
"value": "l’occitane"
}
}
}]
}
}
Нет. Странно, если я поменяю апостроф с «это в документе» на:
"query": {
"bool": {
"should": [
{
"term": {
"myField.keyword_lowercase": {
"value": "l'occitane"
}
}
}]
}
}
Теперь поиск термина работает. Я нахожу эту проблему с другими словами со специальными символами, насколько я понимаю, фильтр асцифолдинга должен предотвращать это.
Что здесь происходит?