В моем наборе данных ElasticSearch у нас есть уникальные идентификаторы, разделенные точкой. Ряд образцов может выглядеть c.123.5432ElasticSearch nGram фильтрует пунктуацию
Использование Ngram Я хотел бы быть в состоянии искать: c.123.54
Это не возвращает никаких результатов. Я считаю, что токенизатор разбивается на период. Для этого я добавил «пунктуацию» в token_chars, но никаких изменений в результатах не было. Мой анализатор/токенизатор ниже.
Я также пробовал: «token_chars»: [] < --Программа документации должна содержать все символы.
"settings" : {
"index" : {
"analysis" : {
"analyzer" : {
"my_ngram_analyzer" : {
"tokenizer" : "my_ngram_tokenizer"
}
},
"tokenizer" : {
"my_ngram_tokenizer" : {
"type" : "nGram",
"min_gram" : "1",
"max_gram" : "10",
"token_chars": [ "letter", "digit", "whitespace", "punctuation", "symbol" ]
}
}
}
}
},
Edit (Подробнее): Это отображение соответствующего поля:
"ProjectID":{"type":"string","store":"yes", "copy_to" : "meta_data"},
И это поле Я копирую его в (который также имеет анализатор Ngram):
"meta_data" : { "type" : "string", "store":"yes", "index_analyzer": "my_ngram_analyzer"}
Это команда, я использую в смысле, чтобы увидеть, если мой поиск работы (см, что ищет поле «meta_data»):
GET /_search?pretty=true
{
"query": {
"match": {
"meta_data": "c.123.54"
}
}
}
Что происходит, когда вы проверить его с:/ /_analyze?text="c.1234.56"&tokenizer=my_ngram_tokenizer –
mconlin
@mconlin я получаю результат, который выглядит следующим образом: http://pastebin.com/udrPLSy4 – Brandon
@mconlin Что-то важное: Существующие данные - «C.A1234.5678». Если я ищу «1234», я получаю результат. Если я ищу «A1234», я ничего не получаю. – Brandon