Elasticsearch с маркировки "Н&Р блоки" как "ч", "р", "н&р", "блоков"
Я хочу сохранить специальный символ в маркере, а тем временем все еще маркировать специальные символы. Скажи, что у меня есть слово
"H&R Blocks"
Я хочу обозначить его как
"H", "R", "H&R", "Blocks"
Я прочитал этот пост http://www.fullscale.co/blog/2013/03/04/preserving_specific_characters_during_tokenizing_in_elasticsearch.html . В нем объяснялось, как сохранить особый характер.
2 ответа:
Попробуйте использовать фильтр токенов
word_delimiter
.Читая документы по его использованию , вы задаете параметр
preserve_original: true
, чтобы сделать именно то, что вы хотите (т. е. "H&R" =>H&R
H
R
).Я бы поставил его так:
"settings" : { "analysis" : { "filter" : { "special_character_spliter" : { "type" : "word_delimiter", "preserve_original": "true" } }, "analyzer" : { "your_analyzer" : { "type" : "custom", "tokenizer" : "whitespace", "filter" : ["lowercase", "special_character_spliter"] } } } }
Удачи!
"settings" : { "analysis" : { "filter" : { "blocks_filter" : { "type" : "word_delimiter", "preserve_original": "true" }, "shingle":{ "type":"shingle", "max_shingle_size":5, "min_shingle_size":2, "output_unigrams":"true" }, "filter_stop":{ "type":"stop", "enable_position_increments":"false" } }, "analyzer" : { "blocks_analyzer" : { "type" : "custom", "tokenizer" : "whitespace", "filter" : ["lowercase", "blocks_filter", "shingle"] } } } }, "mappings" : { "type" : { "properties" : { "company" : { "type" : "string", "analyzer" : "blocks_analyzer" } } } }