我已经在ElasticSearch中插入了位置,下面是ElasticSearch存储位置的示例:
[
{
"lat": 1,
"lon": 1,
"place": "asddda ddsd asdad vasanth hhjkhk sdsdd asddasd"
},
{
"lat": 2,
"lon": 2,
"place": "asddda ddsd asdad vasanth1 hhjkhk sdsdd asddasd"
},
{
"lat": 3,
"lon": 3,
"place": "asddda ddsd asdad vasanth2 hhjkhk sdsdd asddasd"
},
{
"lat": 4,
"lon": 4,
"place": "asddda ddsd asdad test hhjkhk sdsdd asddasd"
}
]
如果我搜索vasanth
,它会给出正确的结果,因为它应该给予所有3个结果。但如果我搜索字符删除Vsanth
,它只给出一个结果,但现在它也应该给出3个结果。而且,如果我插入一个字符,那么我也。不能正常工作。
根据ElasticSearch单据,它的模糊查询有以下特点:
Changing a character (box → fox)
Removing a character (black → lack)
Inserting a character (sic → sick)
Transposing two adjacent characters (act → cat)
下面是我正在使用的查询,
{
"query": {
"fuzzy": {
"address": {
"value": "Vsanth",
"fuzziness":15,
"transpositions":true,
"boost": 5
}
}
}
}
那么,我如何修改查询以使用模糊查询的所有四个特性呢?我不知道我犯了什么错误。
2条答案
按热度按时间3bygqnnd1#
问题是您有更多的编辑距离来匹配
vasanth1 and vasanth2
。参考文献
模糊度参数可指定为:
0、1、2
0..2=必须完全匹配
3..5=允许一次编辑
5个以上=允许两次编辑
您将模糊度指定为15,因此只允许两次编辑,这是es中的最大值。
因此,这里的问题是,您的查询需要3个编辑距离,这是不支持的。
原因三:
Vsanth --〉Vsanth --〉瓦桑--〉瓦桑1
1.大小写变化-〉大写V变为小写v
1.添加a -〉凡士林
1.再加一个-〉vasanth 1
因此,您将获得唯一的
vasanth
匹配文档。模糊查询是术语查询,它们不会被分析。添加小写过滤器到您的
place
字段的分析器在这里没有帮助。9cbw7uwe2#
可以使用“fuzzy”运算符在query_string中进行模糊搜索:
它使用Damerau-Levenshtein距离来查找最多有两处变化的所有术语,其中一处变化是单个字符的插入、删除或替换,或者两个相邻字符的换位。
要获得详细说明,请参阅此官方文档
添加一个工作示例,包括搜索查询和搜索结果,采用与问题中提到的相同的示例索引数据
搜索查询:
搜索结果: