Я нахожусь в плотном графике для демонстрации с помощью Elastic Search.Пользовательский тип для частичного поиска слов в Elastic Search
Я установил свою базу данных, использовал вход JDBC с Logstash и начал индексировать таблицы базы данных. Его все работает отлично в некоторой степени. Но частичный поиск слов не работает. Быстрый поиск в эластичных документах предложил фильтры nGram и стволовые клетки. Поскольку я не получал стволовых клеток, я пошел по пути фильтров ngram.
Ниже мое отображение индекса,
{
"settings" : {
\t "analysis" : {
\t \t "analyzer" : {
\t \t \t "translation_index_analyzer" : {
\t \t \t \t "type" : "custom",
\t \t \t \t "tokenizer" : "standard",
\t \t \t \t "filter" : "standard, lowercase, translation"
\t \t \t },
\t \t \t "translation_search_analyzer" : {
\t \t \t \t "type" : "custom",
\t \t \t \t "tokenizer" : "standard",
\t \t \t \t "filter" : "standard, lowercase"
\t \t \t } \t \t
\t \t },
\t \t "filter" : {
\t \t \t "translation" : {
\t \t \t \t "type" : "nGram",
\t \t \t \t "min-gram" : 3,
\t \t \t \t "max-gram" : 12
\t \t \t }
\t \t }
\t }
},
"mappings" : {
"type" : {
\t \t "properties" : {
\t \t "myType" : {
\t \t \t "type" : "string",
"index_analyzer" : "translation_index_analyzer",
"search_analyzer" : "translation_search_analyzer"
\t \t } \t
\t \t }
},
"employee" : {
"properties" : {
"birth_date": {
"type": "date",
"format" : "yyyy-MM-dd HH:mm:ss ZZ"
},
"emp_no": {
"type": "long",
"index" : "not_analyzed"
},
"first_name": {
"type": "myType"
},
"gender": {
"type": "string",
"index" : "not_analyzed"
},
"hire_date": {
"type": "date",
"format" : "yyyy-MM-dd HH:mm:ss ZZ"
},
"last_name": {
"type": "string"
}
}
}
}
я скорее угадал отображение типа, как мне нужно что-то вроде этого отчаянно. Не уверен, правильно ли это.
Когда я после этого я получаю ошибку
{
"error": {
"root_cause": [
{
"type": "mapper_parsing_exception",
"reason": "analyzer on field [myType] must be set when search_analyzer is set"
}
],
"type": "mapper_parsing_exception",
"reason": "Failed to parse mapping [type]: analyzer on field [myType] must be set when search_analyzer is set",
"caused_by": {
"type": "mapper_parsing_exception",
"reason": "analyzer on field [myType] must be set when search_analyzer is set"
}
},
"status": 400
}
Любые подсказки, где я ошибся?
UPDATE: Моя упругая версия 2,2
переход от index_analyzer к анализатору дал другую ошибку
{
"error": {
"root_cause": [
{
"type": "mapper_parsing_exception",
"reason": "No handler for type [myType] declared on field [first_name]"
}
],
"type": "mapper_parsing_exception",
"reason": "Failed to parse mapping [employee]: No handler for type [myType] declared on field [first_name]",
"caused_by": {
"type": "mapper_parsing_exception",
"reason": "No handler for type [myType] declared on field [first_name]"
}
},
"status": 400
}
FINAL РЕШЕНИЕ: Ну, моя проблема была с определением тип. Что я буду игнорировать на данный момент, но частичный поиск работает со следующими установки
{
"settings" : {
"analysis" : {
"analyzer" : {
"my_ngram_analyzer" : {
"tokenizer" : "my_ngram_tokenizer"
}
},
"tokenizer" : {
"my_ngram_tokenizer" : {
"type" : "nGram",
"min_gram" : "3",
"max_gram" : "12",
"token_chars": [ "letter", "digit" ]
}
}
}
},
"mappings" : {
"employee" : {
"properties" : {
"birth_date": {
"type": "date",
"format" : "yyyy-MM-dd HH:mm:ss ZZ"
},
"emp_no": {
"type": "long",
"index" : "not_analyzed"
},
"first_name": {
"type": "string",
"analyzer" : "my_ngram_analyzer",
"search_analyzer" : "my_ngram_analyzer"
},
"gender": {
"type": "string",
"index" : "not_analyzed"
},
"hire_date": {
"type": "date",
"format" : "yyyy-MM-dd HH:mm:ss ZZ"
},
"last_name": {
"type": "string",
"analyzer" : "my_ngram_analyzer",
"search_analyzer" : "my_ngram_analyzer"
}
}
}
}
}
Что версия elasticsearch? –