Возникли проблемы с соответствием записи о человеке по определенным правилам с использованием эластичного поиска - PullRequest
0 голосов
/ 03 января 2019

Я использую эластичный поиск и хочу сопоставлять людей в базе данных, чтобы избежать возможных дубликатов.Мои правила для соответствия человеку:

Идентификационный номер или номер usn должны точно соответствовать

ИЛИ

Имя, адрес электронной почты и номер мобильного телефонадолжно совпадать нечетко (они должны быть как можно ближе) или даже два из этих трех должны совпадать

Почему? У меня есть БД с 20k + внутренних деловых записей людей,Когда добавляется новый человек, я хочу представить создателю возможные совпадения.Когда человек сопоставляется (и подтверждается) или создает нового, он добавляется на мой сервер Flexiblesearch (поэтому все на моем 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' 
]

Поскольку он имеет тот же идентификатор, но его нет.

Другие совпадения работают нормально, но я изо всех сил пытаюсь получить правильный запрос для моей логики.

Последнее слово: Раньше я использовал ручной поиск с использованием SQL и Левенштейна в своей операционной базе данных, но с ростом количества записей я переключился наasticsearch.Теперь я отправляю работу два раза в день, чтобы попытаться сопоставить всех неподтвержденных лиц

  • Извините за длинный пост, представьте себе картофель
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...