кажется, что токенизатор ngram не работает или, возможно, я неправильно понимаю / использую его.
мой токенизатор делает минграм из 3 и maxgram из 5. Я ищу термин «мадонна», который определенно присутствует в моих документах в разделе Artist.name. Я могу найти термин с помощью других методов (с использованием простого анализатора и подобных), но не с помощью ngram.
то, что я пытаюсь достичь с помощью ngram, - это поиск имен и учет орфографических ошибок.
пожалуйста, просмотрите сокращенную версию моих сопоставлений, моих настроек и моего запроса, и если у вас есть какие-либо идеи, пожалуйста, дайте мне знать - это сводит меня с ума!
настройки...
{
"myindex": {
"settings": {
"index": {
"analysis": {
"analyzer": {
"ngramAnalyzer": {
"type": "custom",
"filter": [
"lowercase"
],
"tokenizer": "nGramTokenizer"
}
},
"tokenizer": {
"nGramTokenizer": {
"type": "nGram",
"min_gram": "3",
"max_gram": "5"
}
}
},
"number_of_shards": "5",
"number_of_replicas": "1",
"version": {
"created": "1020199"
},
"uuid": "60ggSr6TREaDTItkaNUagg"
}
}
}
}
сопоставления ...
{
"myindex": {
"mappings": {
"mytype": {
"properties": {
"artists.name": {
"type": "string",
"analyzer": "simple",
"fields": {
"ngram": {
"type": "string",
"analyzer": "ngramAnalyzer"
},
"raw": {
"type": "string",
"index": "not_analyzed"
}
}
}
}
}
}
}
}
запрос ...
{"query": {"match": {"artists.name.ngram": "madonna"}}}
документ ...
{
"_index": "myindex",
"_type": "mytype",
"_id": "602537592951",
"_version": 1,
"found": true,
"_source": {
"artists": [
{
"name": "Madonna",
"id": "P 64565"
}
]
}
}
EDIT кстати, этот запрос работает (без ngram):
{"query": {"match": {"artists.name": "madonna"}}}
очевидно, это как-то связано с вложенным здесь объектом. Я, по-видимому, неправильно применяю ngram к вложенному объекту.
идеи?