Я хотел бы создать индекс в ElasticSearch, который хранит определенный тип данных, который имеет некоторые строковые поля. Язык венгерский.ElasticSearch с анализатором hunspell
Я побежал команду HTTP PUT со следующим телом:
{
"settings" : {
"analysis" : {
"analyzer" : {
"hu" : {
"tokenizer" : "standard",
"filter" : [ "lowercase", "hu_HU" ]
}
},
"filter" : {
"hu_HU" : {
"type" : "hunspell",
"locale" : "hu_HU",
"language" : "hu_HU"
}
}
}
},
"mappings": {
"printedArticle": {
"_source": {"enabled": false},
"properties": {
"_id": {"type": "string", "store": true},
"mysqlid": {"type": "long", "store": false},
"publishDate": {"type": "date", "format": "dateOptionalTime", "store": false},
"title": {"type": "string", "analyzer": "hu", "analyze": true, "store": false},
"lead": {"type": "string", "analyzer": "hu", "analyze": true, "store": false},
"content": {"type": "string", "analyzer": "hu", "analyze": true, "store": false},
"participants": {"type": "string", "analyzer": "hu", "analyze": true, "store": false},
"authors": {"type": "string", "analyzer": "hu", "analyze": true, "store": false},
"subtitle": {"type": "string", "analyzer": "hu", "analyze": true, "store": false}
}
}
}
}
Затем я вставил одну записи с тестовым текстом, и если я запустить поиск через эластичный API с запросом GET, как это:
http://localhost:9200/mf_pa/_search?q=MYTESTTEXT
он находит мою запись только в том случае, если мой тестовый текст равен одному из слов моей записи.
Я попытался проанализировать некоторый подобный текст на основе анализа API:
http://localhost:9200/mf_pa/_analyze?analyzer=hu&text=My text to tokenize
и лексемы мой тестовый текст правильно. Исходя из этого факта, я ожидаю, что если я положу ранее найденный токен в свой поисковый запрос, он найдет запись, но это не так.
Для английского примера я бы сказал, что мой текст «незабываемый», и мой запрос «забыл». Что нужно сделать, чтобы найти запись?
Спасибо за ваш ответ! Сначала я заметил, что мои тестовые данные не были вставлены правильно (я вставил в printArticles вместо printArticle). Я также проверил отображение и изменил «анализ»: true 'to' "index": "проанализировано". Я также проверил анализатор, и оказалось, что он правильно анализирует мой текст. Я выполнил поисковый запрос, в котором я указал поле: «GET/mf_pa/_search? Field = title & text = MYTESTTEXT», и это было успешно. Итак, я думаю, мой вопрос заключается в том, как искать во всех полях? – maestro
Также выяснилось, что если я задаю параметр 'text' для поиска, например. '/ mf_pa/_search? text = MYTESTTEXT', он возвращает правильный результат, поэтому мой поисковый запрос был неправильным. Спасибо за ваш ответ, вы указали, что мое сопоставление было неправильным, и я использовал API поиска неправильно ... – maestro
По какой-то странной причине на веб-странице ElasticSearch все поисковые запросы отображаются как 'GET', а не' POST'. Если я запускаю поиск как 'POST', он работает. – maestro