Требование нечеткого поиска:
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"
}]