gpt4 book ai didi

java - Elasticsearch : "fuzzy_like_this_field" filter query is not working

转载 作者:行者123 更新时间:2023-12-01 10:43:57 25 4
gpt4 key购买 nike

我在 Elasticsearch 过滤器中面临以下问题:

当我尝试对字符串值应用“fuzzy_like_this_field”时,它工作正常。

但是当我对字符串以外的不同数据类型(例如 double 、日期)应用“fuzzy_like_this_field”过滤器时,它不起作用。

它给出

ElasticsearchIllegalArgumentException[fuzzy_like_this_field doesn't support binary/numeric fields.

请参阅下面的 Elasticsearch 查询

{"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 更改为字符串,那么它就可以工作。

那么请提出任何解决方案?

最佳答案

模糊查询扩展文本搜索结果以包含特定的术语 Levenshtein Distance从查询词。它们按边距扩展数值-fuzziness <= value <= +fuzzyiness(需要更改或转置以匹配的字符数) - 但是,fuzzy_like_thisfuzzy_like_this_field 似乎仅支持字符串匹配(通过 Levenshtein 距离)。

<小时/>

fuzzy_like_thisfuzzy_like_this_field 查询在 ES 1.6+ 中已弃用。他们都面临着性能问题。您应该找到另一种方法来实现您的目标。

有多种方法可以应用模糊匹配,但我不确定模糊匹配是您想要的。

通过指定:

"fuzzy_like_this_field":{  
"Receipts.retailerId":{
"like_text":"55f5878916c042cc8731a39e4e05b7a0",
"fuzziness":0.3
}
}

您要求匹配与 like_text 匹配的所有 retailerId,最多可进行 22 次编辑。 编辑距离 = 长度(术语)*(1.0 - 模糊度)= 32 * 0.7 = 22.4

因此,在这种情况下,55ddddddd6c0ddddddd1a3dddddddda0 将符合 55f5878916c042cc8731a39e4e05b7a0 的模糊匹配,因为其中 10 个字符共享相同的位置。

<小时/>

如果您只是查找重复交易,为什么不简单地使用匹配查询或过滤器来精确匹配您的 retailerIdtotalCost 呢?

"query":{  
"bool":{
"must":[
{
"match":{
"Receipts.retailerId": "55f5878916c042cc8731a39e4e05b7a0"
}
},
{
"match":{
"Receipts.totalCost": 10
}
}
]
}
}

关于java - Elasticsearch : "fuzzy_like_this_field" filter query is not working,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34307767/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com