使用Elasticsearch在特定规则上匹配个人记录的问题

时间:2019-01-03 15:35:14

标签: php elasticsearch

我正在使用elasticsearch,希望匹配数据库中的人员,以避免重复。我匹配一个人的规则是:

  

idnumber或usnumber必须完全匹配

     

OR

     

姓名,电子邮件和手机应该模糊匹配(它们应该尽可能地接近),或者甚至这三个中只有两个必须匹配

为什么? 我的数据库拥有超过20k个人的内部业务记录。添加新人员后,我想向创建者显示可能的匹配项。当一个人被匹配(并确认)或创建新人时,他们被添加到我的Elasticsearch服务器中(因此我的ES服务器中的所有内容都得到确认)

我不想简单地匹配一个名字(很多人名字都一样)

额外:我正在使用Laravel

这是我尝试过的查询:

变量可能为空

'body' => [
                'query' => [
                    ['bool' => [
                        'must' => [
                            ['match' => ['usnumber' => $usnumber]],
                            ['match' => ['idnumber' => $idnumber]],
                        ],
                        'should' => [
                            ['match' => ['name' => $name]],
                            ['match' => ['email' => $email]],
                            ['match' => ['mobile' => $mobile]],
                        ]
                    ]
                    ]
                ]
            ],

[
   'name' => 'Person A',
   'idnumber' => '123456789',
   'usnumber' => '654321', 
   'email' => 'person_a@example.com',
   'mobile' => '987654321' 
]

应匹配:

[
   'name' => 'Different name',
   'idnumber' => '123456789',
   'usnumber' => '123456', 
   'email' => 'different@email.com',
   'mobile' => '123456789' 
]

因为它具有相同的ID号,但没有。

其他匹配项工作正常,但我一直在努力为自己的逻辑获取正确的查询。

最后一句话:我曾经在操作数据库中使用SQL和Levenshtein进行手动搜索,但是随着记录数量的增加,我切换到了Elasticsearch。现在,我每天两次派遣一份工作,以尝试与所有未经证实的人相匹配

  • 很抱歉,想念一个土豆

0 个答案:

没有答案