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 2

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"
           }
       }
   }
}