我正在使用query_string
,我希望能够让我的搜索能够容忍错别字。在下面的查询中,我输入了The Gren Mile
,但它没有返回任何结果:
curl -XPOST 127.0.0.1:9200/test
curl -XPOST 127.0.0.1:9200/test/movies -d '{"title": "The Green Mile"}'
curl -XPOST 127.0.0.1:9200/test/_refresh
curl -XPOST 127.0.0.1:9200/test/movies/_search -d '{
"query": {
"query_string": {
"query": "The Gren Mile",
"default_operator": "AND"
}
}
}'
它在Elasticsearch docs中说明fuzziness
默认为AUTO
(随着字词越来越大,容忍更大的拼写错误),所以我不知道它为什么没有#&# 39;工作。我尝试手动设置fuzziness: 2
,但它也没有用。这个选项是否做了我认为的其他事情?
答案 0 :(得分:1)
我没有得到关于为什么模糊参数不起作用的答案 - 它对我来说也不起作用,可能这是一个错误?
然而,将模糊运算符~
直接放在字符串中可以起作用:
curl -XPOST 127.0.0.1:9200/test/movies/_search?pretty -d '{
"query": {
"query_string": {
"query": "The Gren~ Mile",
"default_operator": "AND"
}
}
}'
返回记录:
{
"took" : 6,
"timed_out" : false,
"_shards" : {
"total" : 5,
"successful" : 5,
"failed" : 0
},
"hits" : {
"total" : 1,
"max_score" : 0.263573,
"hits" : [ {
"_index" : "test",
"_type" : "movies",
"_id" : "AUxq8KE1EKExB5CrkB_W",
"_score" : 0.263573,
"_source":{"title": "The Green Mile"}
} ]
}
}
使用匹配查询的模糊性工作。将query_string与匹配查询组合(以形成单个查询),或者如果用户的原始搜索未返回任何结果,则执行匹配查询。
"query": {
"match": {
"title": {
"query": "The Gren Mile",
"operator" : "and",
"fuzziness": 2
}
}
}