Заказать Solr результаты по степени дружбы - PullRequest
4 голосов
/ 22 августа 2011

В настоящее время я использую Solr 1.4 (скоро для обновления до 3.3).Таблица дружбы довольно стандартна:

id | follower_id | user_id 

Я хотел бы выполнить регулярный поиск по ключевым словам и упорядочить результаты по степеням разделения, а также упорядочить стандартные оценки.Из набора результатов, учитывая, что ключевое слово соответствует любому из моих ближайших друзей, они будут отображаться в первую очередь.Во-вторых, это друзья моих друзей, и, в-третьих, друзья по 3-й степени разделения.Все остальные результаты будут получены после.

Я почти уверен, что Solr не предлагает какой-либо «предварительно запеченный» способ сделать это, поэтому мне, вероятно, придется объединить MySQL, чтобы правильно упорядочить результаты.Любопытно, если кто-то делал это раньше и / или имеет некоторые идеи.

Ответы [ 4 ]

2 голосов
/ 23 августа 2011

Одним из способов может быть создание полей типа degree_1, degree_2 и т. Д. И сохранение списка друзей в степени x в поле degree_x.Затем вы можете запустить несколько запросов - первый ограничивает результаты теми, у кого вы есть в degree_1, второй ограничивает результаты теми, у кого вы есть в degree_2 и т. Д.

Это немногосложное, но единственное решение, которое я мог придумать, используя Solr.

2 голосов
/ 22 августа 2011

Это просто невозможно в Solr. Однако, если вы не слишком ограничены и можете использовать для этого другую платформу, рассмотрите neo4j?

* * * * * * * * * * * * * * * * * * * * * * * *

* * * * * * * * * * * * * * * 1004

enter image description here

http://neo4j.org/

0 голосов
/ 26 августа 2011

Я смог добиться этого, выполнив несколько запросов и с областью «с», чтобы ограничить идентификаторы коллег, коллег 2-й и 3-й степени, используя идентификаторы и используя mysql для выбора.

@search_1 = perform_search(1, options)
@search_2 = perform_search(2, options)

if degree == 1
  with(:id).any_of(options[:colleague_ids])
elsif degree == 2
  with(:id).any_of(options[:second_degree_colleagues])
end

Это довольно грязное решение, так как мне приходится выполнять несколько запросов solr, но пока я не могу использовать параметры сортировки динамического поля (solr 3.3, в настоящее время не поддерживается sunspot), я действительно не знаю ни одногоДругой способ добиться этого.

0 голосов
/ 22 августа 2011

Я раньше не представлял график в solr, но я думаю, что на высоком уровне это то, что вы могли бы сделать.Во-первых, представляйте людей как узлы, а социальные сети - как граф в базе данных.Реализуйте транзитивное замыкание функцию в SQL, чтобы позволить вам ходить по графику.Затем вы индексировали бы результат в solr с информацией о социальной сети, сохраненной в полезных нагрузках , для примера .

...