我是ElasticSearch的新手,目前正在探索它的功能。我感兴趣的其中之一是Fuzzy Query,我正在对其进行测试并且使用时遇到了麻烦。这可能是一个愚蠢的问题,所以我想已经使用此功能的人会很快找到答案,至少我希望如此。:)
顺便说一句,我觉得它可能不仅与ElasticSearch相关,而且可能与Lucene直接相关。
让我们从一个名为“first index”的新索引开始,我在其中存储了一个值为“american football”的对象“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" : [ ]
}
}
如您所见,没有命中。但是现在,当我将查询的值从“美式足球”缩小到“美式足球”时,如下所示:
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 网站上有一个专门用于模糊查询的页面,但我不确定它是否列出了我可以用于模糊查询的所有潜在参数。我能找到这么详尽的清单吗?
实际上,其他查询的问题相同。
使用 lucene 语法进行模糊匹配的模糊查询和查询字符串查询之间有区别吗?