Solr高级应用-facet应用_第1页
Solr高级应用-facet应用_第2页
Solr高级应用-facet应用_第3页
Solr高级应用-facet应用_第4页
Solr高级应用-facet应用_第5页
已阅读5页,还剩20页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Solr高级应用facet的应用1 Facet介绍solr facet 是solr搜索的一大特色,facet不好翻译,facet的意思为“小平面、侧面、方面”有说是垂直搜索,有说是分片搜索,我们就叫它层面统计吧。,具体功能看下面的例子意会吧。比如你上京东,输入“笔记本”进行搜索,就会出现品牌分类,价格范围等分类,这个就叫facet了。这个例子也许好不是那么准确的描述facet,不过基本上就是这个意思。对输入关键字后搜索出来的结果再进行分类。2 Facet基本参数2.1 facet:是否开启层面统计,true开启,false不开启。Facet结果:当然,这只是开启的层面统计,并没有指定要统计什么。要想看到结果还需要指定facet.field参数,指定要统计的域。2.2 facet.query指定使用Lucene查询生成层面计数。这个参数允许你使用Lucene默认语法指定一个随意的查询来生成层面计数。你可以多次设置 facet.query 参数来设置多个查询,不同的查询得到不同的统计结果,此统计是在主查询条件查询结果基础上进行统计的。查询条件:facet=true&facet.query=*:*&facet.query=goods_name:锤子手机&facet.query=goods_sell_price:2000 TO *查询结果:2.3 facet.field指定要进行层面分析的域。分析域中所有的term,并进行层面计数。查询中这个参数可以指定多次,以此来实现对多个域进行层面分析。例如对品牌字段进行层面统计:查询条件:facet=true&facet.field=goods_brand_name查询结果:结果中,将商品的品牌进行分类统计,并统计出每种分类下有多少个商品。2.4 facet.prefix该参数指定需要被进行层面分析的term需要以给定字符串作为前缀。对查询没有任何限制,只作用于响应的层面分析查询(这个参数可以使用 f.facet.prefix 在每个field上指定前缀),起到过滤层面结果的作用。例如:结果:只把包含“华”这个字的品牌“华为”显示了出来,其他品牌就过滤掉了。2.5 facet.sort该参数指定层面结果排序方式。如果 facet.limit 大于0,默认使用 count ,否则,默认使用 index 。这个参数可以使用 f.facet.sort 在每个field上指定排序方式。例如:结果:当然,这也是默认的排序方式,如果不指定也是使用count排序的。使用index排序:结果:2.6 facet.limit该参数指定最大返回数目(基本上是返回的field的数量)。负值表示对返回数量无限制。默认值是100。这个参数可以使用 f.facet.limit 在每个field上指定返回数量。例如:结果:正常清空下facet分析后的结果是4个品牌,由于设置最大返回结果为3,所以只保留了3个品牌。2.7 facet.mincountl 该参数指定返回结果中进行层面分析的field的最小数量。如果一个field的计数低于指定值,则该field的将不返回。默认值是0。这个参数可以使用 f.facet.mincount 在每个field上指定最小数量。例如:当不设置此参数时:、当设置最小返回结果为2时:结果:只返回了一个品牌,因为其他品牌统计结果都是1小于2所以就被过滤掉了。2.8 facet.missing如果设置为true,这个参数表明,除了以term为基础的层面分析,返回结果中需要计算没有对应的域或者域中没有值的文档数量(就是field值为null的记录)。默认值false。这个参数可以使用 f.facet.missing 在每个field上指定是否起作用。例如:结果:将结果中没有品牌域的文档的数量也统计了出来。3 facet范围分析3.1 参数说明facet.range.otherl facet.range:定义Solr进行范围分析的字段。facet.range=price&facet.range=agefacet.range=lastModified_dtl facet.range.start:指定范围的起始值。可以使用 f.facet.range.start 对每个field分别指定。f.price.facet.range.start=0.0&f.age.facet.range.start=10f.lastModified_dt.facet.range.start=NOW/DAY30DAYSl facet.range.end:指定范围的结束值。f.price.facet.range.end=1000.0&f.age.facet.range.start=99f.lastModified_dt.facet.range.end=NOW/DAY+30DAYSl facet.range.gap:指定范围步进大小。对于date类型的field,需要使用DateMatrParser表达式(比如, facet.range.gap=%2B1DAY.+1DAY )。可以使用 f.facet.range.gap 对每个field分别指定。比如:f.price.facet.range.gap=100&f.age.facet.range.gap=10f.lastModified_dt.facet.range.gap=+1DAYl facet.range.hardend:布尔参数,指定处理Solr开始和结尾不均匀分布的情况。ture,最后一个范围只到end值。false,最后一个范围可能超过end值。默认值是false。可以使用 f.facet.range.hardend 对每个field分别指定。l Facet.range.include:默认情况下,范围计算过程中,包括 facet.range.start 定义的起始值,不包括 facet.range.end 定义的结束值。 facet.range.otrer 定义的”before”不包含,定义的”after”包含。默认值是”lower”,在边界不重复计数。可以使用 facet.range.include 参数修改行为:可以使用 f.facet.range.include 对每个field分别指定。注意:要避免重复计数l facet.range.other:计算除了上结束值之间步进统计的数据之外,以其他方式统计数据,可以有以下选项:可以使用 f.facet.range.other 对每个field分别指定。注意all选项,它可能重复计算已经定义其他选项,但不会覆盖其他选项。3.2 例子统计从06000价格区间内商品的数量,每隔2000一个区间。查询条件:facet=true&facet.range=item_price&facet.range.start=0&facet.range.end=500000&facet.range.gap=100000&facet.range.other=after结果:4 使用solrJ实现facet4.1 统计域的facet4.1.1 测试方法Testpublic void testFacetField() throws Exception SolrServer solrServer = new HttpSolrServer(54:8080/solr);/设置查询条件SolrQuery solrQuery = new SolrQuery();solrQuery.setQuery(*:*);solrQuery.setFacet(true);solrQuery.set(facet.field,item_category_name);/执行查询QueryResponse queryResponse = solrServer.query(solrQuery);/取facet结果List facetFields = queryResponse.getFacetFields();for (FacetField facetField : facetFields) /facet域的名称System.out.println(facetField.getName();/取facet结果List values = facetField.getValues();for (Count count : values) /分类名称System.out.println(count.getName();/统计数值System.out.println(count.getCount();4.1.2 结果item_category_name手机724平板电视214台灯14.2 统计区间facet4.2.1 测试方法Testpublic void testFacetRange() throws Exception SolrServer solrServer = new HttpSolrServer(54:8080/solr);/设置查询条件SolrQuery solrQuery = new SolrQuery();solrQuery.setQuery(*:*);solrQuery.setFacet(true);solrQuery.set(facet.range, item_price);solrQuery.set(facet.range.start, 0);solrQuery.set(facet.range.end, 600000);solrQuery.set(facet.range.gap, 100000);solrQuery.set(facet.range.other, after);/执行查询QueryResponse queryResponse = solrServer.query(solrQuery);List facetRanges = queryResponse.getFacetRanges();for (RangeFacet rangeFacet : facetRanges) /统计facet区间的域System.out.println(rangeFacet.getName();/取统计结果List counts = rangeFacet.getCounts();for (Object object : counts) /分段统计结果org.apache.solr.client.solrj.response.RangeFacet.Count count = (org.apache.solr.client.solrj.response.RangeFacet.Count) object;/区间System.out.print(count.getValue() + + (Integer.parseInt(count.getValue() + Integer.parseInt(rangeFacet.getGap().toString() + :);/结果System.out.pr

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论