Przejrzałem podobne pytania na tej stronie, ale nie znalazłem odpowiedniego rozwiązania.Wiązanie za pomocą SolrJ i Solr4
Podczas odpytywania mój indeks Solr4 użyciu żądania HTTP formularza
&facet=true&facet.field=country
Odpowiedź zawiera wszystkie różne kraje wraz z liczbą w danym kraju.
Jak mogę uzyskać te informacje za pomocą SolrJ? Próbowałem następujących ale tylko zwraca całkowitą liczbę we wszystkich krajach, a nie na kraj:
solrQuery.setFacet(true);
solrQuery.addFacetField("country");
Poniższy wydaje się działać, ale nie chcę mieć jawnie ustawić wszystkie ugrupowania wcześniej:
solrQuery.addFacetQuery("country:usa");
solrQuery.addFacetQuery("country:canada");
Po drugie, nie jestem pewien, jak wyodrębnić dane facet z obiektu QueryResponse.
Więc dwa pytania:
1) Korzystanie SolrJ jak mogę Facet na polu i powrócić pogrupowania bez wyraźnego określania grup?
2) Korzystanie z SolrJ Jak mogę wyodrębnić dane aspektu z obiektu QueryResponse?
Dzięki.
Aktualizacja:
Próbowałem też coś podobnego do odpowiedzi Sergey za (poniżej).
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);
}
Powyższy kod pokazuje ffList o rozmiarze = 1, a pętla przechodzi przez 1 iterację. W wynikach ffname = "country" i ffcount jest całkowita liczba wierszy pasujących do pierwotnego zapytania.
Nie ma tutaj podziału na poszczególne kraje.
Powinienem wspomnieć, że na tym samym obiekcie SolrQuery wywołuję również addField i addFilterQuery. Nie wiem, czy to wpływ szlifowaniem:
solrQuery.addField("user-name");
solrQuery.addField("user-bio");
solrQuery.addField("country");
solrQuery.addFilterQuery("user-bio:" + "(Apple OR Google OR Facebook)");
Aktualizacja 2:
Myślę, że mam go znowu na podstawie tego, co powiedział Sergey poniżej. Wyodrębniono obiekt List za pomocą FacetField.getValues ().
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();
}
}
W powyższym kodzie zmienna etykiety pasuje do każdej grupy aspektów, a liczba jest odpowiednią liczbą dla tej grupy.
Dzięki Sergey. Zaktualizowałem moje pytanie powyżej, aby uwzględnić podejście, o którym wspomniałeś. –