Jaro Winkler поиск оптимизировать в mongodb / эластичный поиск - PullRequest
0 голосов
/ 30 октября 2019

Требование нечеткого поиска:

   FuzzyModel: JaroWinkler
   Condition: Name order not important in match score
   eg: fuzzy(David Beckham) = fuzzy(Beckham David)

Примечание: поиск по блокирующему параметру не будет выполняться (это означает, что поиск будет выполняться только по имени, без использования других атрибутов)

Подход с использованием оригинальной функции JavaScript:
1 - Использование перестановок для поиска по словам. (например: если будет n слов, то будет n! комбинаций)
2 - применить jaro winkler (каждый цикл перестановок с каждым именем)

Объяснение:
-Ранее я читал из файла json и обрабатывал элемент за элементом на основе написанной функции.
- Теперь я импортирую его в базу данных mongodb. Очевидно, что я не могу запросить всю коллекцию сразу и обработать документ за документом.
- Я также прошел через упругий поиск, но не нашел хорошего решения.
- Обратите внимание, что других параметров нет, все будут основаны только на нечетком совпадении имен (другого поиска нет). параметры, отличные от имени)

Всего комбинаций в loop = n! * общее количествоимен и имен в другом имени (где n - количество слов).
Если в названии 3 слова, значит 3! * 50 тыс., Что составляет около 300 тыс. Циклов.

Ожидание:
Поисковый запрос должен выполняться столько же или меньше времени, что и при сравнении с прямым чтением из файла JSON.

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

Один документ:

{
  "ID": 1,
  "Title": "Mr.",
  "Name": "David Hello",
  "OtherName": [
    {
     "Title": "Mr.",
     "Name": "David Beckham"
     }
  ];
}

Ожидаемый результат поиска (сортировка по убыванию числа совпадений):

/search?name=David Beckham
[{
   "MatchID": 1,
   "MatchScore": 90,
   "MatchName": "David Beckham 1"
}]

/search?name=Hello David
[{ 
   "MatchID": 1,
   "MatchScore": 100,
   "MatchName": "David Hello"
}]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...