Bu sitedeki ilgili soruları gözden geçirdim, ancak uygun bir çözüm bulamadım. SolrJ ve Solr4 kullanılarak yapılan kaplama
formu&facet=true&facet.field=country
yanıt bir HTTP isteği kullanarak benim Solr4 endeksi sorgulama ülke başına sayımları ile birlikte tüm farklı ülkeleri içermektedir.
Bu bilgiyi SolrJ kullanarak nasıl edinebilirim? Aşağıdaki denedim ama sadece değil ülke başına, tüm ülkelerde toplam sayıları verir:
solrQuery.setFacet(true);
solrQuery.addFacetField("country");
işe yarıyor gibi aşağıdaki ama açıkça önceden tüm gruplaşmalar ayarlamak zorunda kalmak istemiyoruz:
solrQuery.addFacetQuery("country:usa");
solrQuery.addFacetQuery("country:canada");
İkinci olarak, faset verilerini QueryResponse nesnesinden nasıl ayıklayacağımı bilmiyorum.
Yani iki soru: Ben bir alanda faset ve açıkça grupları belirtmeden gruplaşmalar dönebilirsiniz nasıl SolrJ kullanma1)?
2) SolrJ'yi kullanma Faset verilerini QueryResponse nesnesinden nasıl çıkarabilirim?
Teşekkürler.
Güncelleme: Ben de Sergey'in tepki (aşağıda) benzer bir şey denedik
.
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);
}
Yukarıdaki kod, ffList boyutunu = 1 ile gösterir ve döngü 1 yinelemeden geçer. Çıktı ffname = "country" ve ffcount, orijinal sorguyla eşleşen toplam satır sayısıdır.
Burada ülke başına bir arıza yok.
Aynı solrQuery nesnesinde addField ve addFilterQuery'yi de arıyorum. Emin değilim bu etkiler Faceting eğer:
solrQuery.addField("user-name");
solrQuery.addField("user-bio");
solrQuery.addField("country");
solrQuery.addFilterQuery("user-bio:" + "(Apple OR Google OR Facebook)");
Güncelleme 2:
Anladım düşünüyorum yine Sergey aşağıda söylediklerini dayalı. List nesnesini FacetField.getValues () kullanarak çıkardım.
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();
}
}
Yukarıdaki kodda, etiket değişkeni her bir faset grubuyla eşleşir ve bu gruplama için karşılık gelen sayıdır.
Teşekkürler Sergey. Bahsettiğiniz yaklaşımı dahil etmek için yukarıdaki sorumu güncelledim. –