Apache Solr - Facettierung
Facettierung in Apache Solr bezieht sich auf die Klassifizierung der Suchergebnisse in verschiedene Kategorien. In diesem Kapitel werden die in Apache Solr verfügbaren Facettierungstypen erläutert.
Query faceting - Es wird die Anzahl der Dokumente in den aktuellen Suchergebnissen zurückgegeben, die auch der angegebenen Abfrage entsprechen.
Date faceting - Es wird die Anzahl der Dokumente zurückgegeben, die in bestimmte Datumsbereiche fallen.
Facettierungsbefehle werden zu jeder normalen Solr-Abfrageanforderung hinzugefügt, und die Facettierungszahlen werden in derselben Abfrageantwort zurückgegeben.
Beispiel für eine Facettierungsabfrage
Das Feld benutzen facetingkönnen wir die Anzahl für alle Begriffe oder nur die Top-Begriffe in einem bestimmten Feld abrufen.
Betrachten wir als Beispiel Folgendes books.csv Datei, die Daten zu verschiedenen Büchern enthält.
id,cat,name,price,inStock,author,series_t,sequence_i,genre_s
0553573403,book,A Game of Thrones,5.99,true,George R.R. Martin,"A Song of Ice
and Fire",1,fantasy
0553579908,book,A Clash of Kings,10.99,true,George R.R. Martin,"A Song of Ice
and Fire",2,fantasy
055357342X,book,A Storm of Swords,7.99,true,George R.R. Martin,"A Song of Ice
and Fire",3,fantasy
0553293354,book,Foundation,7.99,true,Isaac Asimov,Foundation Novels,1,scifi
0812521390,book,The Black Company,4.99,false,Glen Cook,The Chronicles of The
Black Company,1,fantasy
0812550706,book,Ender's Game,6.99,true,Orson Scott Card,Ender,1,scifi
0441385532,book,Jhereg,7.95,false,Steven Brust,Vlad Taltos,1,fantasy
0380014300,book,Nine Princes In Amber,6.99,true,Roger Zelazny,the Chronicles of
Amber,1,fantasy
0805080481,book,The Book of Three,5.99,true,Lloyd Alexander,The Chronicles of
Prydain,1,fantasy
080508049X,book,The Black Cauldron,5.99,true,Lloyd Alexander,The Chronicles of
Prydain,2,fantasy
Lassen Sie uns diese Datei mit dem in Apache Solr posten post Werkzeug.
[Hadoop@localhost bin]$ ./post -c Solr_sample sample.csv
Bei Ausführung des obigen Befehls werden alle in dem angegebenen Dokument erwähnt .csv Die Datei wird in Apache Solr hochgeladen.
Lassen Sie uns nun eine facettierte Abfrage für das Feld ausführen author mit 0 Zeilen in der Sammlung / im Kern my_core.
Öffnen Sie die Web-Benutzeroberfläche von Apache Solr und aktivieren Sie das Kontrollkästchen auf der linken Seite facet, wie im folgenden Screenshot gezeigt.
Wenn Sie das Kontrollkästchen aktivieren, haben Sie drei weitere Textfelder, um die Parameter der Facettensuche zu übergeben. Übergeben Sie nun als Parameter der Abfrage die folgenden Werte.
q = *:*, rows = 0, facet.field = author
Führen Sie abschließend die Abfrage aus, indem Sie auf klicken Execute Query Taste.
Bei der Ausführung wird das folgende Ergebnis angezeigt.
Es kategorisiert die Dokumente im Index nach Autor und gibt die Anzahl der Bücher an, die von jedem Autor beigesteuert wurden.
Facettieren mit der Java Client API
Im Folgenden finden Sie das Java-Programm zum Hinzufügen von Dokumenten zum Apache Solr-Index. Speichern Sie diesen Code in einer Datei mit dem NamenHitHighlighting.java.
import java.io.IOException;
import java.util.List;
import org.apache.Solr.client.Solrj.SolrClient;
import org.apache.Solr.client.Solrj.SolrQuery;
import org.apache.Solr.client.Solrj.SolrServerException;
import org.apache.Solr.client.Solrj.impl.HttpSolrClient;
import org.apache.Solr.client.Solrj.request.QueryRequest;
import org.apache.Solr.client.Solrj.response.FacetField;
import org.apache.Solr.client.Solrj.response.FacetField.Count;
import org.apache.Solr.client.Solrj.response.QueryResponse;
import org.apache.Solr.common.SolrInputDocument;
public class HitHighlighting {
public static void main(String args[]) throws SolrServerException, IOException {
//Preparing the Solr client
String urlString = "http://localhost:8983/Solr/my_core";
SolrClient Solr = new HttpSolrClient.Builder(urlString).build();
//Preparing the Solr document
SolrInputDocument doc = new SolrInputDocument();
//String query = request.query;
SolrQuery query = new SolrQuery();
//Setting the query string
query.setQuery("*:*");
//Setting the no.of rows
query.setRows(0);
//Adding the facet field
query.addFacetField("author");
//Creating the query request
QueryRequest qryReq = new QueryRequest(query);
//Creating the query response
QueryResponse resp = qryReq.process(Solr);
//Retrieving the response fields
System.out.println(resp.getFacetFields());
List<FacetField> facetFields = resp.getFacetFields();
for (int i = 0; i > facetFields.size(); i++) {
FacetField facetField = facetFields.get(i);
List<Count> facetInfo = facetField.getValues();
for (FacetField.Count facetInstance : facetInfo) {
System.out.println(facetInstance.getName() + " : " +
facetInstance.getCount() + " [drilldown qry:" +
facetInstance.getAsFilterQuery());
}
System.out.println("Hello");
}
}
}
Kompilieren Sie den obigen Code, indem Sie die folgenden Befehle im Terminal ausführen:
[Hadoop@localhost bin]$ javac HitHighlighting
[Hadoop@localhost bin]$ java HitHighlighting
Wenn Sie den obigen Befehl ausführen, erhalten Sie die folgende Ausgabe.
[author:[George R.R. Martin (3), Lloyd Alexander (2), Glen Cook (1), Isaac
Asimov (1), Orson Scott Card (1), Roger Zelazny (1), Steven Brust (1)]]