2013-07-12 2 views
5

내 문제는 Solr에서 n 개의 필드 (약 10 개)를 검색 할 수 있다는 것입니다.이 필드는 모두 인덱싱되어 저장됩니다. 500 개의 문서를 평균적으로 읽는 5000 개의 문서를 내 전체 색인에 대한 쿼리를 먼저 실행하고 싶습니다. 다음으로는 전체 500 개 문서가 아닌 다른 키워드 집합을 사용하여 쿼리하고 싶습니다.Solr의 다중 쿼리

처음으로 쿼리를 보내면 점수가 생성됩니다. 두 번째로 쿼리를 실행하면 생성 된 새 점수는 이전 쿼리의 500 개 문서를 기반으로해야합니다. 즉 Solr은이 점만을 고려해야합니다. 전체 색인으로 500 문서.

요약하면 5000의 인덱스는 500으로 필터링 된 다음 50 (5000> 500> 50)으로 필터링됩니다. 기본적으로 필터링하지만 Solr에서이 작업을 수행하려고합니다.

나는 합리적인 기본 지식을 가지고 있으며 여전히 학습하고 있습니다.

업데이트 : 수학적으로 표현하면 그 결과는 다음과 같습니다

results1=f(query1) 
results2=f(query2, results1) 
final_results=f(query3, results2) 

나는이 50 개 결과를 볼 것이다 프로그램 및 최종 사용자를 사용하여 수행 할 수 싶습니다. 따라서 패싯은 옵션이 아닙니다.

답변

3

Filter queries (fq) 빠른 제한을 수행하도록 특별히 설계되었습니다. 어떤 점수 계산도하지 않음으로써 결과 집합의

그래서 첫 번째 쿼리를 fq 매개 변수에 넣고 두 번째 점수 생성 쿼리를 일반적인 'q'매개 변수에 넣으면 요청한 것을 수행해야합니다.

도 참조하십시오. a question discussing this issue from the opposite direction.

+0

고맙습니다 Alexandre, 내 초기 테스트를 기반으로 내 문제를 해결한다고 말할 수 있습니다. 또한 걸린 시간이 거스의 해결책보다 훨씬 적음을 알 수 있습니다. 귀하의 솔루션과 거스의 솔루션을 함께 사용하면 내 문제를 포괄적으로 해결할 수 있습니다. – user2575429

0

Solr의 "패싯 검색"을 고려해야합니다 : http://wiki.apache.org/solr/SolrFacetingOverview 이렇게하면 이러한 종류의 "반복적 인"검색에 도움이됩니다.

+0

안녕하세요, 저는 패싯에 대해 알고 있지만 사용하고 싶지 않습니다. 드릴링 부분, 나는 그것을 프로그램에서하고 싶습니다. 최종 사용자에게는 최종 결과 50 개만 표시되며 그 밖의 것은 표시되지 않습니다. 첫 번째 쿼리 후 완전히 다른 매개 변수를 사용하여 얻은 결과에 대해 두 번째 쿼리를 실행하고 싶습니다. – user2575429

2

나는이 같은 중첩 된 쿼리를 사용하려는 생각 :

text:"roses are red" AND _query_:"type:poems" 

현재 중첩 된 쿼리에 대한 자세한 내용을보실 수 있습니다 :

http://searchhub.org/2009/03/31/nested-queries-in-solr/

+0

고맙습니다. Gus, 내 요구 사항에 대한 좋은 접근 방법이라고 생각합니다. 더 자세히 살펴보고 몇 가지 테스트를 실시하고 작동 방식을 살펴 보겠습니다. 도와 주셔서 감사합니다. – user2575429

5

두 가지 가능성이 구현은 나에게 발생합니다. 가장 간단한 방법은 첫 번째 쿼리를 두 번째 쿼리에 추가하는 것입니다.

+(first query) +(new query) 

필터링하려는 첫 번째 쿼리가 자주 변경되는 경우 좋은 방법입니다. 첫 번째 쿼리가 같은 필터의 재사용 혜택을 누릴 수있는 문서의 종류, 또는 이와 유사한 같은 것이 있다면, 필터 쿼리가 더 나은 방법이 fq parameter를 사용하고, 뭔가 같은 :

q=field:query2&fq=categoryField:query1 

필터 쿼리는 필터링 할 문서 ID 집합을 캐시하므로 범주, 공통 날짜 범위 등과 같이 일반적으로 사용되는 검색의 경우 중요한 성능 이점을 얻을 수 있습니다 (드문 검색이나 사용자 입력 검색 문자열의 경우 결과를 캐시하기위한 불필요한 오버 헤드가 발생하고 쓸모없는 결과 세트로 캐시를 오염시킵니다.)