Алгоритм слияния результатов поиска

Я реализую панель поиска, которая должна искать 2 основные строки A и B. Я отдаю приоритет результатам следующим образом (от наиболее важного к наименьшему)

  1. результат, объединяющий А и В
  2. результат только для Б
  3. результат только для А

так, например, если я ищу "Египет" + "Пирамиды", я хочу, чтобы мои первые результаты были для таких вещей, как "Египетские пирамиды", за которыми следуют результаты о "Пирамидах" в целом или в виде геометрической фигуры и т. д., и, наконец, Результаты

Я пытаюсь найти несколько API-интерфейсов поиска, таких как Google и Bing, в настоящее время я делаю то, что сначала я ищу оба, чтобы получить набор результатов X, а затем только B, чтобы получить то, что я называю положительным списком, а затем искать только A, чтобы получить отрицательный список.. Я оцениваю результаты в X и наказываю их, если они существуют в отрицательном списке, даю им бонус, если они существуют в положительном списке, затем в конце я складываю все, что осталось в положительном списке, к X..

Это работает хорошо, но все еще недостаточно хорошо, мне было интересно, может ли кто-нибудь помочь мне с дополнением к этому простому алгоритму или совершенно другой идее

1 ответ

Вам нужно использовать что-то, что называется "набор" для такой задачи, как эта. http://en.wikipedia.org/wiki/Set_%28computer_science%29

Если вы ищете "Египет" + "Пирамиды", создайте "набор" для каждого из отдельных условий поиска. Наиболее важные результаты находятся в том, что мы называем "пересечением" множеств (как в наборе "Египет", так и в наборе "Пирамиды").

Результаты с более низким приоритетом находятся в том, что мы называем "относительными дополнениями" наборов. Представьте, что вы хотели все в B, чего не было в A. Мы называем это относительным дополнением A в B).

Большинство языков программирования имеют библиотеку / пакет, реализующий набор для вас (которые оптимизированы).

Другие вопросы по тегам