Я новичок в ElasticSearch и в настоящее время изучаю его возможности. Один из них, который меня интересует, — это Fuzzy Query , который я тестирую, и у меня возникли проблемы с его использованием. Вероятно, это фиктивный вопрос, поэтому я думаю, что кто-то, кто уже использовал эту функцию, быстро найдет ответ, по крайней мере, я надеюсь.:)
Кстати, у меня такое ощущение, что это может быть связано не только с ElasticSearch , но, возможно, напрямую с Lucene .
Начнем с нового индекса с именем «первый индекс», в котором я храню объект «метка» со значением «американский футбол». Это запрос, который я использую.
bash-3.2$ curl -XPOST 'http://localhost:9200/firstindex/node/?pretty=true' -d '{
"node" : {
"label" : "american football"
}
}
'
Вот результат, который я получаю.
{
"ok" : true,
"_index" : "firstindex",
"_type" : "node",
"_id" : "6TXNrLSESYepXPpFWjpl1A",
"_version" : 1
}
Пока все хорошо, теперь я хочу найти эту запись, используя нечеткий запрос. Это тот, который я посылаю:
bash-3.2$ curl -XGET 'http://localhost:9200/firstindex/node/_search?pretty=true' -d '{
"query" : {
"fuzzy" : {
"label" : {
"value" : "american football",
"boost" : 1.0,
"min_similarity" : 0.0,
"prefix_length" : 0
}
}
}
}
'
И вот результат, который я получаю
{
"took" : 15,
"timed_out" : false,
"_shards" : {
"total" : 5,
"successful" : 5,
"failed" : 0
},
"hits" : {
"total" : 0,
"max_score" : null,
"hits" : [ ]
}
}
Как видите, не попал. Но теперь, когда я немного уменьшаю значение моего запроса с «американский футбол » до «американский футб » вот так :
bash-3.2$ curl -XGET 'http://localhost:9200/firstindex/node/_search?pretty=true' -d ' {
"query" : {
"fuzzy" : {
"label" : {
"value" : "american footb",
"boost" : 1.0,
"min_similarity" : 0.0,
"prefix_length" : 0
}
}
}
}
'
, я получаю правильное попадание в свою запись, таким образом, результат:
{
"took" : 0,
"timed_out" : false,
"_shards" : {
"total" : 5,
"successful" : 5,
"failed" : 0
},
"hits" : {
"total" : 1,
"max_score" : 0.19178301,
"hits" : [ {
"_index" : "firstindex",
"_type" : "node",
"_id" : "6TXNrLSESYepXPpFWjpl1A",
"_score" : 0.19178301, "_source" : {
"node" : {
"label" : "american football"
}
}
} ]
}
}
Итак, у меня есть несколько вопросов, связанных с этим тестом:
Почему я не получил никакого результата при выполнении запроса со значением, полностью равным моей единственной записи "американский футбол "
Это связано с тем, что у меня значение из нескольких слов -?
Есть ли способ получить показатель «сходства» в результатах моего запроса, чтобы я мог лучше понять, как найти правильный порог для моих нечетких запросов
Существует страница, посвященная Нечеткому запросу на веб-сайте ElasticSearch, но я не уверен, что там перечислены все возможные параметры, которые я могу использовать для нечеткого запроса. Где я мог найти такой исчерпывающий список?
Тот же вопрос по другим запросам.
Есть ли разница между Fuzzy Query и Query String Query с использованием синтаксиса lucene для получения нечеткого соответствия?