Я новичок в ElasticSearch и сейчас изучаю его возможности. Один из них меня интересует - "Нечеткий запрос", который я тестирую и имею проблемы. Вероятно, это фиктивный вопрос, поэтому я предполагаю, что тот, кто уже использовал эту функцию, быстро найдет ответ, по крайней мере, я надеюсь.:)
Кстати, я чувствую, что это может быть связано не только с ElasticSearch, но, возможно, напрямую с Lucene.
Начните с нового индекса с именем "first index", в котором я храню объект "label" со значением "американский футбол". Это запрос, который я использую.
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" : [ ]
}
}
Как вы можете видеть, никакого удара нет. Но теперь, когда я немного уменьшаю значение моего запроса от "Американский футбол" до "Американский footb", как это:
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"
}
}
} ]
}
}
Итак, у меня есть несколько вопросов, связанных с этим тестом:
-
Почему я не получил никакого результата при выполнении запроса со значением, полностью равным моей единственной записи "Американский футбол"
-
Связано ли это с тем, что у меня многословное значение?
-
Есть ли способ получить оценку "подобия" в моем результате запроса, чтобы я мог лучше понять, как найти правильный порог для моих нечетких запросов.
-
Существует страница, посвященная Fuzzy Query на веб-сайте ElasticSearch, но я не уверен, что в ней перечислены все потенциальные параметры, которые я могу использовать для нечеткого запроса. Можно ли найти такой исчерпывающий список?
-
Тот же вопрос для других запросов на самом деле.
-
Есть ли разница между Fuzzy Query и Query String Query с использованием синтаксиса lucene для получения нечеткого соответствия?