我在弹性搜索过滤器中面临以下问题:
当我尝试在字符串值上应用“fuzzy_like_this_field”时,它工作正常。
但是当我对String以外的不同数据类型(例如double,Date)应用“fuzzy_like_this_field”过滤器时,它不起作用。
它给出了
ElasticsearchIllegalArgumentException [fuzzy_like_this_field不支持二进制/数字字段。
请参阅以下弹性搜索查询
{"query": {"bool": {"must": [{"fuzzy_like_this_field": {"Receipts.retailerId": {"like_text": "55f5878916c042cc8731a39e4e05b7a0","fuzziness":0.3}}},{"fuzzy_like_this_field": {"Receipts.totalCost": {"like_text": "10","fuzziness":0.3}}}],"must_not": [],"should": []}},"from": 0,"size": 1000,"sort": [],"facets": {}}
其中retailerId - String和totalCost - double
如果我将totalCost数据类型double更改为string,那么它可以正常工作。
那么请建议任何解决方案?
答案 0 :(得分:1)
模糊查询扩展文本搜索结果,以包含查询字词中某个Levenshtein Distance的字词。它们将数值扩展为边距 -fuzziness< = value< = + fuzzyiness (需要更改或转置以匹配的字符数) - 但是,fuzzy_like_this
和{{ 1}}似乎只支持字符串匹配(通过Levenshtein距离)。
fuzzy_like_this_field
和fuzzy_like_this
个查询。他们都遇到了性能问题。你应该找到另一种方法来实现你的目标。
有很多方法可以应用模糊匹配,但我不确定模糊匹配是你所追求的。
指定:
fuzzy_like_this_field
您要求将与"fuzzy_like_this_field":{
"Receipts.retailerId":{
"like_text":"55f5878916c042cc8731a39e4e05b7a0",
"fuzziness":0.3
}
}
匹配的所有retailerId
与最多22次修改匹配。 like_text
因此,在这种情况下,Edit distance = length(term) * (1.0 - fuzziness) = 32 * 0.7 = 22.4
符合55ddddddd6c0ddddddd1a3dddddddda0
的模糊匹配,因为其中10个字符共享相同的位置。
相反,如果您只是在寻找重复的交易,为什么不简单地使用匹配查询或过滤器来完全匹配您的55f5878916c042cc8731a39e4e05b7a0
和retailerId
?
totalCost