在Elasticsearsch

时间:2017-04-19 07:58:27

标签: elasticsearch

我的要求起初看起来很简单,但过去几天我一直在反对它。我有一个包含客户数据的索引。要求是当新客户到达时,程序应在索引中查找该客户。匹配高于特定百分比的结果应视为完全重复,而具有较低匹配百分比(例如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
  }}}

这是我想象的:我想给以下字段一个特定的"重量"总匹配百分比:

  • FIRST_NAME:1
  • LAST_NAME,MAILING_CITY:2
  • PHONE,WORK_PHONE:3
  • EMAIL,MOBILE_PHONE:4

每个字段具有完全相同值的每个记录都将与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做到这一点吗?任何线索都将受到高度赞赏。谢谢!

0 个答案:

没有答案