Я хочу указать для каждого анализатора поля в поиске elastics. Для некоторых полей мне нужен анализатор ключевых слов, в то время как для одного мне нужен собственный анализатор номер, который удалит все нецифровые символы (см number_analyzer
ниже в коде)Анализаторы эластичного поиска
запрос, который создает индекс
{
"settings": {
"analysis" : {
"analyzer" : {
"number_analyzer" : {
"type": "custom",
"tokenizer": "keyword",
"filter": ["lowercase"],
"char_filter": ["number_filter"]
}
},
"char_filter" : {
"number_filter" : {
"type": "pattern_replace",
"pattern": "[\\d]+",
"replacement": ""
}
}
}
}
}
отображение для полей
{
"properties": {
"field1": {
"type": "string",
"store": "yes",
"index": "analyzed",
"analyzer": "number_analyzer"
},
"field2": {
"type": "string",
"store": "yes",
"index": "not_analyzed",
"analyzer": "keyword"
},
"field3": {
"type": "string",
"store": "true",
"index": "not_analyzed"
},
"field4": {
"type": "string",
"store": "yes",
"index": "analyzed"
},
"field5": {
"type": "string",
"store": "yes",
"index": "analyzed",
"analyzer": "number_analyzer"
}
}
}
Когда я ввожу следующий документ в индексе
{
"field1" : "464533AB",
"field2" : "Euro",
"field3" : "THIS IS A TITLE",
"field4": "DEED_TYPE",
"field5":"TEST3"
}
Я заметил, что символы из поля1 не удалены (моя цель состоит в том, чтобы сохранить только 464533
), а также что я могу получить результаты по запросу field4:DEED_TYPE
, хотя я не должен (я думаю, что стандартный анализатор удалит специальный символ и выполнить строчные буквы, поэтому я ожидал бы, что field4:DEED_TYPE
будет работать только с анализатором ключевых слов).
Есть ли ошибка в том, как анализаторы указаны в приведенном выше коде?