이 사이트의 관련 질문을 완료했지만 관련 솔루션을 찾지 못했습니다. SolrJ 및 Solr4를 사용하여 패터닝
형태&facet=true&facet.field=country
응답의 HTTP 요청을 사용하여 내 Solr4 인덱스를 쿼리 국가 별 카운트와 함께 모든 다른 나라가 포함되어 있습니다.
SolrJ를 사용하여이 정보를 얻으려면 어떻게해야합니까? 나는 다음과 같은 시도했지만 그것은뿐만 아니라 국가 별, 모든 국가에 걸쳐 총 수를 반환
solrQuery.setFacet(true);
solrQuery.addFacetField("country");
작업하는 것처럼 보인다 다음,하지만 난 명시 적으로 사전에 모든 그룹을 설정해야하고 싶지 않은 :
solrQuery.addFacetQuery("country:usa");
solrQuery.addFacetQuery("country:canada");
둘째, 나는 QueryResponse 객체의면 데이터를 추출하는 방법을 모르겠어요.
그래서 두 가지 질문 : 나는 필드에 패싯 명시 적으로 그룹을 지정하지 않고 그룹을 반환 할 수있는 방법 SolrJ를 사용1)?
2) SolrJ를 사용하면 어떻게 QueryResponse 객체에서 패싯 데이터를 추출 할 수 있습니까?
감사합니다.
업데이트 : 나는 또한 세르게이의 응답 (아래)과 비슷한 시도
.
List<FacetField> ffList = resp.getFacetFields();
log.info("size of ffList:" + ffList.size());
for(FacetField ff : ffList){
String ffname = ff.getName();
int ffcount = ff.getValueCount();
log.info("ffname:" + ffname + "|ffcount:" + ffcount);
}
위의 코드는 크기가 1 인 ffList를 보여주고 루프는 1 반복을 거칩니다. ffname = "country"출력에서 ffcount는 원래 쿼리와 일치하는 총 행 수입니다.
여기에는 국가 별 분석이 없습니다.
동일한 solrQuery 객체에서 addField 및 addFilterQuery도 호출해야 함을 언급해야합니다. 확실하지 않음이 미치는 영향은 패 시팅 (faceting) 경우 :
solrQuery.addField("user-name");
solrQuery.addField("user-bio");
solrQuery.addField("country");
solrQuery.addFilterQuery("user-bio:" + "(Apple OR Google OR Facebook)");
업데이트 2 :
는 내가 그것을 가지고 생각, 다시 세르게이는 아래의 말에 따라. FacetField.getValues ()를 사용하여 List 객체의 압축을 풉니 다.
List<FacetField> fflist = resp.getFacetFields();
for(FacetField ff : fflist){
String ffname = ff.getName();
int ffcount = ff.getValueCount();
List<Count> counts = ff.getValues();
for(Count c : counts){
String facetLabel = c.getName();
long facetCount = c.getCount();
}
}
위의 코드에서 label 변수는 각 패싯 그룹과 일치하고 count는 해당 그룹의 해당 개수입니다.
감사합니다. Sergey. 내가 언급 한 접근 방식을 포함하도록 위의 질문을 업데이트했습니다. –