2013-02-22 2 views
2

편집SOLR 그룹화 빈 필드

내가 아니라 내 필요성을 설명하지 않은 경우 미안 해요. 나는 더 나은 설명을하려고 노력할 것이다.

내가 무엇을 가지고 : 필드의 X, 다른 필드 Y와 필요하지 않은 다른 필드 Z이 문서의 수백만 (그래서 다른 사람의 일부 문서에서 빈하지 될 수 있습니다).

내가 원하는 작업 : 필드 X가있는 문서를 검색하고 필드 Z로 그룹화 (모든 필드 Z 값에 대해 하나의 문서 만 반환되도록 함)하지만 필드 Z가있는 문서를 원하는 경우 결과에 모두 포함되도록 비워두고 필드 Y로 결과를 정렬합니다 (요청을 두 개의 요청으로 분리 할 수 ​​없음).

나는이 명확 바랍니다.

답변

1

이합니다 (SOLR 메일 링리스트 사용자의) 내 문제에 대한 찾을 수있는 가장 좋은 대답은 "(모두) 결과에 포함, 현장 Y에 의해 결과를 정렬 할 Z 비어 :

아이디어는 Z 필드의 복사 필드를 사용하고, 데이터를 인덱싱 할 때 Z 필드가 비어 있으면 복사 필드에 고유 한 값을 생성합니다. 그룹화 할 때 필드 Z 대신 복사 필드를 사용하십시오. (필드 Z는 그룹화에만 필요하면 복사 필드없이 단독으로 사용할 수 있음).

+0

동일한 솔루션을 사용해 왔지만 더 나은 방법이 있어야한다고 생각합니다. – user779420

0

당신은 그것을 달성하기 위해 group.maingroup.query를 사용할 수 있습니다.

예를 들어, 쿼리는 아래의 0에서 인기 10 개와 그룹 결과와 가격으로 모든 문서를 가져옵니다. group.query=popularity:[* TO *]을 설정하면 인기가 유지됩니다. group.main=true을 만들면 group.query 결과가 주요 결과가됩니다.

select?q=price:[0%20TO%20 10]&wt=json&group=true&group.field=popularity&group.query=popularity:[*%20TO%20*]&group.main=true

https://wiki.apache.org/solr/FieldCollapsing

업데이트를 참조하십시오 : 나는 위에서 작동하지 않습니다를 참조하십시오. 그래서 위의 내 대답을 삭제하고 새로운 대답을주는 대신에 나는 대답을 편집 할 것을 권장합니다 :-).

는이 같은 2 개 쿼리를 할 수 있습니까?

q=X:1&group=true&group.field=Z 

"나는 필드가 문서를 원하는

"(단 1 문서가 모든 분야의 Z 값에 대해 반환되도록) 필드 X이 문서 검색이 필드 Z에 의해 어떤 그룹을 동일 "

q=(X:1 AND -Z:[* TO *])&rows=SOME_LARGE_NUMBER&sort=Y asc 
+0

이 작업은 내가 원하는 작업이 아니며 모든 문서를 필드별로 그룹화하고 싶지만 해당 필드를 비워 두지 않고 문서를 그룹화하지 않고 결과에 여전히 포함 시키십시오. – Oussama

+0

감사합니다. 필요한 정렬 때문에 두 개의 쿼리를 수행하지 마십시오. – Oussama