Моя конфигурация поиска пока работает хорошо, но я не могу понять, как заставить NGram Tokenizer искать такие символы, как &, +, ² и т. д.
Когда я использую «стандартный» токенизатор, он ищет символы и дает правильные результаты. Поэтому я думаю, что мое сопоставление с токенизатором NGram неверно.
Вот моя конфигурация отображения:
"settings": {
"number_of_shards": 4,
"analysis": {
"tokenizer": {
"ngram_tokenizer": {
"type": "nGram",
"min_gram": "1",
"max_gram": "20",
"token_chars": [
"letter",
"digit",
"punctuation",
"symbol"
]
}
},
"filter": {
"autocomplete_filter": {
"type": "edge_ngram",
"min_gram": 1,
"max_gram": 20
},
"whitespace_remove": {
"type": "pattern_replace",
"pattern": " ",
"replacement": ""
}
},
"analyzer": {
"autocomplete": {
"type": "custom",
"tokenizer": "ngram_tokenizer",
"filter": [
"lowercase",
"autocomplete_filter"
]
},
"concat_analyzer": {
"filter": [
"lowercase",
"whitespace_remove",
"nGram"
],
"type": "custom",
"tokenizer": "keyword"
},
"analyzer_firstletter": {
"filter": "lowercase",
"tokenizer": "keyword"
}
}
}
и мое отображение:
"mappings": {
"devicemodel": {
"_timestamp": {
"enabled": true,
"store": "yes"
},
"_id": {
"path": "id"
},
"properties": {
"id": {
"store": "yes",
"type": "string"
},
"devicemodelID": {
"store": "yes",
"type": "string"
},
"devicemodelcode": {
"store": "yes",
"type": "string",
"index_analyzer": "autocomplete",
"search_analyzer": "standard",
"search_quote_analyzer": "autocomplete",
"term_vector": "with_positions_offsets",
"fields": {
"firstletter": {
"analyzer": "analyzer_firstletter",
"type": "string"
}
}
},
"devicemodel": {
"store": "yes",
"type": "string",
"index_analyzer": "autocomplete",
"search_analyzer": "standard",
"search_quote_analyzer": "autocomplete",
"term_vector": "with_positions_offsets",
"fields": {
"concat": {
"type": "string",
"index_analyzer": "concat_analyzer",
"search_analyzer": "standard"
}
}
},