2011-08-22 4 views
4

현재 Solr 1.4 (곧 3.3로 업그레이드)를 사용 중입니다. 우정 테이블은 꽤 표준입니다 :Solr 결과를 우정으로 주문하십시오.

id | follower_id | user_id 
내가 분리의 정도뿐만 아니라 표준 점수 순서에 의해 결과를 정기적 키워드 SOLR 검색을 수행하고 주문하고 싶습니다

. 결과 세트에서 키워드가 내 직계 친구들과 일치하면 주어진 키워드가 먼저 표시됩니다. 두 번째로 제 친구의 친구가 될 것이며 세 번째 친구는 ​​제 3의 친구가 될 것입니다. 다른 모든 결과는 뒤를 따를 것입니다.

Solr은이 작업을 수행하기 위해 사전에 구운 방법을 제공하지 않기 때문에 결과를 올바르게 정렬하기 위해 MySQL에 조인해야 할 가능성이 큽니다. 누구든지이 일을 전에했는지, 그리고/또는 통찰력이 있는지 궁금합니다.

답변

-1

여러 쿼리를 수행하고 "with"를 사용하여 동료의 ID, 2 및 3도 동료의 ID로 제한하고 id를 사용하고 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, 현재 흑점에 의해 지원되지 않음) 정말 다른 방법을 모르는 이것을 달성하십시오.

2

Solr에서는 불가능합니다. 그러나 너무 제한적이지 않고 다른 플랫폼을 사용할 수 있다면 neo4j를 고려해보십시오.

"연결"과도 정확히 어디에서 Neo4j 단계.

enter image description here

http://neo4j.org/

+0

이 부분이 검색 부분에서 어떻게 도움이됩니까? – brupm

+0

그렇지 않습니다. 언급 한대로 분리 정도에 따라 관련성 점수에 영향을 줄 수는 없습니다. 그러나 일부 맞춤 검색을 완전히 제공하고 싶다면 이와 비슷한 것을 사용할 수 있습니다. 그러나 Solr을 분명히 사용할 수는 없습니다. 미안해, 내 대답에 그 인상을 주면. – Layke

0

내가 전에 SOLR에서 그래프를 표현하지 않은,하지만 난 높은에서 생각 레벨, 이것이 당신이 할 수있는 것입니다. 먼저 사람들을 노드로, 소셜 네트워크를 데이터베이스로 그래프로 표현합니다. transitive closure 함수를 SQL에 구현하여 그래프를 볼 수 있습니다. 그런 다음 payloads에 저장된 소셜 네트워크 정보가 example 인 결과를 solr로 색인화합니다.

2

한 가지 방법은, degree_1처럼 등 degree_2을 필드를 생성하고 필드 degree_x에서 X 정도 에서 친구 목록을 저장할 수 있습니다. 그런 다음 여러 쿼리를 실행할 수 있습니다. 먼저 결과를 degree_1에있는 사용자로 제한하고 두 번째 쿼리는 degree_2에있는 사용자에게 결과를 제한합니다.

다소 복잡하지만 Solr을 사용하여 생각할 수있는 유일한 해결책입니다.

+0

이것은 성능면에서 미친 듯이 나빠질 것 같습니다. degree_1, degree_2, degree_3 및 기타 4 가지 유형의 결과를 모두 반환하려면 동일한 키워드에 대해 4 개의 쿼리가 필요합니다. 답변 감사합니다. – brupm

관련 문제