Алгоритм слияния результатов поиска
Я реализую панель поиска, которая должна искать 2 основные строки A и B. Я отдаю приоритет результатам следующим образом (от наиболее важного к наименьшему)
- результат, объединяющий А и В
- результат только для Б
- результат только для А
так, например, если я ищу "Египет" + "Пирамиды", я хочу, чтобы мои первые результаты были для таких вещей, как "Египетские пирамиды", за которыми следуют результаты о "Пирамидах" в целом или в виде геометрической фигуры и т. д., и, наконец, Результаты
Я пытаюсь найти несколько API-интерфейсов поиска, таких как Google и Bing, в настоящее время я делаю то, что сначала я ищу оба, чтобы получить набор результатов X, а затем только B, чтобы получить то, что я называю положительным списком, а затем искать только A, чтобы получить отрицательный список.. Я оцениваю результаты в X и наказываю их, если они существуют в отрицательном списке, даю им бонус, если они существуют в положительном списке, затем в конце я складываю все, что осталось в положительном списке, к X..
Это работает хорошо, но все еще недостаточно хорошо, мне было интересно, может ли кто-нибудь помочь мне с дополнением к этому простому алгоритму или совершенно другой идее
1 ответ
Вам нужно использовать что-то, что называется "набор" для такой задачи, как эта. http://en.wikipedia.org/wiki/Set_%28computer_science%29
Если вы ищете "Египет" + "Пирамиды", создайте "набор" для каждого из отдельных условий поиска. Наиболее важные результаты находятся в том, что мы называем "пересечением" множеств (как в наборе "Египет", так и в наборе "Пирамиды").
Результаты с более низким приоритетом находятся в том, что мы называем "относительными дополнениями" наборов. Представьте, что вы хотели все в B, чего не было в A. Мы называем это относительным дополнением A в B).
Большинство языков программирования имеют библиотеку / пакет, реализующий набор для вас (которые оптимизированы).