ElasticSearch ищет дефисный текст с пробелами вместо тире в запросе
Я проиндексировал данные (person) с firstName = "Jean-Marc", и я хотел бы найти этого человека, используя комбинацию различных запросов, например, для firstName "Jean-Marc" должна быть возможность поиска с: "Жан-Марк" и "Жан-Марк" (с пробелом или тире)
Вот карта:
"firstName": {
"type": "keyword",
"normalizer": "keyword_normalizer",
"fields": {
"analysed": {
"type": "text",
"analyzer": "hyphen_analyzer",
"search_analyzer": "standard",
"fielddata": true
}
}
}
И настройки:
"char_filter": {
"allowOnlyChar": {
"pattern": "[^A-Za-z]",
"type": "pattern_replace",
"replacement": " "
}
}
"analyzer": {
"hyphen_analyzers": {
"filter": "lowercase",
"char_filter": [
"allowOnlyChar"
],
"type": "custom",
"tokenizer": "standard"
}
}
Я получаю человека, когда держу черту, но без результата с запросом пробела
Я использую эластичный 6.2.4
1 ответ
Решение
Определите свой анализатор:
"char_filter": {
"allowOnlyChar": {
"pattern": "[^A-Za-z]",
"type": "pattern_replace",
"replacement": " "
}
}
"analyzer": {
"yourAnalyzer": {
"filter": "lowercase",
"char_filter": [
"allowOnlyChar"
],
"type": "custom",
"tokenizer": "standard"
}
}
И, конечно, индексировать ваши документы с этим анализатором. "анализатор": "ваш анализатор"
ссылка на документ: https://www.elastic.co/guide/en/elasticsearch/reference/current/analysis-pattern-replace-charfilter.html