- Apache Solr 教程
- Apache Solr - 首页
- Apache Solr - 概述
- Apache Solr - 搜索引擎基础
- Apache Solr - Windows 环境
- Apache Solr - 在 Hadoop 上
- Apache Solr - 架构
- Apache Solr - 术语
- Apache Solr - 基本命令
- Apache Solr - Core
- Apache Solr - 索引数据
- Apache Solr - 添加文档 (XML)
- Apache Solr - 更新数据
- Apache Solr - 删除文档
- Apache Solr - 检索数据
- Apache Solr - 查询数据
- Apache Solr - 分面搜索
- Apache Solr 有用资源
- Apache Solr - 快速指南
- Apache Solr - 有用资源
- Apache Solr - 讨论
Apache Solr - 分面搜索
Apache Solr 中的分面搜索指的是将搜索结果分类到不同的类别中。在本节中,我们将讨论 Apache Solr 中可用的分面搜索类型 -
查询分面 - 它返回当前搜索结果中也匹配给定查询的文档数量。
日期分面 - 它返回属于特定日期范围内的文档数量。
分面搜索命令添加到任何正常的 Solr 查询请求中,分面搜索计数将在相同的查询响应中返回。
分面搜索查询示例
使用faceting字段,我们可以检索所有术语的计数,或者只是任何给定字段中的前几个术语。
例如,让我们考虑以下books.csv文件,其中包含有关各种书籍的数据。
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
让我们使用post工具将此文件发布到 Apache Solr 中。
[Hadoop@localhost bin]$ ./post -c Solr_sample sample.csv
执行上述命令后,给定.csv文件中提到的所有文档都将上传到 Apache Solr 中。
现在让我们在author字段上对集合/coremy_core执行一个分面搜索查询,并设置0行。
打开 Apache Solr 的 Web UI,在页面左侧,选中facet复选框,如下面的屏幕截图所示。
选中复选框后,您将有另外三个文本字段来传递分面搜索的参数。现在,作为查询的参数,传递以下值。
q = *:*, rows = 0, facet.field = author
最后,点击执行查询按钮执行查询。
执行后,将产生以下结果。
它根据作者对索引中的文档进行分类,并指定每个作者贡献的书籍数量。
使用 Java 客户端 API 进行分面搜索
以下是将文档添加到 Apache Solr 索引的 Java 程序。将此代码保存在名为HitHighlighting.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 = "https://127.0.0.1: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"); } } }
通过在终端中执行以下命令来编译上述代码 -
[Hadoop@localhost bin]$ javac HitHighlighting [Hadoop@localhost bin]$ java HitHighlighting
执行上述命令后,您将获得以下输出。
[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)]]
广告