我的要求起初看起来很简单,但过去几天我一直在反对它。我有一个包含客户数据的索引。要求是当新客户到达时,程序应在索引中查找该客户。匹配高于特定百分比的结果应视为完全重复,而具有较低匹配百分比(例如80-90%)的结果应标记为可能重复。由于弹性搜索评分没有标准化到精确范围(例如0到1),我不确定如何在公式中表达匹配百分比。
这是我到目前为止所做的:
POST _search
{
"query": {
"bool" : {
"should" : [
{ "fuzzy" : { "LAST_NAME" : "Hanks" } },
{ "fuzzy" : { "FIRST_NAME" : "Tom" } },
{ "fuzzy" : { "PHONE" : "0045123456" } },
{ "fuzzy" : { "MAILING_CITY" : "Chicago" } },
{ "fuzzy" : { "EMAIL" : "tom_hanks@email.com" } },
{ "fuzzy" : { "WORK_PHONE" : "0045223344" } },
{ "fuzzy" : { "MOBILE_PHONE" : "0045456789" }}
],
"minimum_number_should_match": 5
}}}
这是我想象的:我想给以下字段一个特定的"重量"总匹配百分比:
每个字段具有完全相同值的每个记录都将与100%的分数完全匹配。然后,说我有LAST_NAME不匹配的记录。我想分数应该计算如下:1(FIRST_NAME体重)+3(PHONE体重)+2(MAILING_CITY体重)+4(EMAIL体重)+3(WORK_PHONE体重)+4(MOBILE_PHONE体重)/(2 + 1) + 3 + 2 + 4 + 3 + 4)= 89%
我知道这是一种非常不准确的方法,可以正确识别重复的客户,但它会给我一个近似的匹配分数,这就是我需要的。 minimum_number_should_match子句会立即过滤掉少于5个匹配子句的客户,并且应为所有其他子句计算匹配百分比。有可能用elasticsearch做到这一点吗?任何线索都将受到高度赞赏。谢谢!