06、solr学习-solr中facet的基本应用-基于solr搜索引擎

一.Facet简介
Facet是Solr的高级搜索功能之一,可以给用户更好的搜索体验,在搜索关键字的同时,能够按照Facet的字段进行分组并统计。
wareName(关键字)-->wareKind(Facet字段)

二.Facet字段

1、 适宜被Facet的字段;

一般代表了实体的某种公共属性,如商品的分类,商品的制造厂家,书籍的出版商等等. 例: 积分商城中的礼品的大类、中类、小类

2、 Facet字段的要求;

为什么无需分词?
因为该字段的值代表了一个整体概念。如电脑的品牌”联想”代表了一个整体概念,如果拆成”联”,”想”两个字都不具有实际意义.另外该字段的值无需进行大小写转换等处理,保持其原貌即可.
为什么无需存储?
因为一般而言用户所关心的并不是该字段的具体值,而是作为对查询结果进行分组的一种手段,用户一般会沿着这个分组进一步深入搜索.

3、 特殊情况;

对于一般查询而言,分词和存储都是必要的.比如CPU类型”Intel 酷睿2双核 P7570”,拆分成”Intel”,”酷睿”,”P7570”这样一些关键字并分别索引,可能提供更好的搜索体验.但是如果将CPU作为Facet字段,最好不进行分词.这样就造成了矛盾,解决方法为,将CPU字段设置为不分词不存储,然后建立另外一个字段为它的COPY,对这个COPY的字段进行分词和存储
例如:积分商城中礼品名称wareName,由于按照礼品名称搜索,故需要分词和存储,如果要按照对应的关键字进行分组的话,就需要COPY。

<types>  
<fieldType name="string" class="solr.StrField" omitNorms="true"/>  
<fieldType name="my\_text" class="solr.TextField" >  
<analyzer>  
……
</analyzer>  
</fieldType>  
……
</types>  
<fields>  
<field name=”cpu” type=”string” indexed=”true” stored=”false”/>  
<field name=”cpuCopy” type=”my\_text” indexed=”true” stored=”true”/>  
……
</fields>  
<copyField source="cpu" dest="cpuCopy"/>

三.Facet组件

四.Facet查询
进行Facet查询需要在请求参数中加入”facet=on”或者”facet=true”只有这样Facet组件才起作用.
1、 FieldFacet;
五.SolrJ对Facet的支持

SolrServer server = getSolrServer();//获取SolrServer  
SolrQuery query = new SolrQuery();//建立一个新的查询  
query.setQuery("\*:\*");  
query.setFacet(true);//设置facet=on  
query.addFacetField(new String\[\] \{ "cpu", "videoCard" \});//设置需要facet的字段  
query.setFacetLimit(10);//限制facet返回的数量  
QueryResponse response = server.query(query);  
List<FacetField> facets = response.getFacetFields();//返回的facet列表  
for(FacetField facet : facets) \{  
System.out.println(facet.getName());  
System.out.println("----------------");  
List<Count> counts = facet.getValues();  
for(Count count : counts) \{  
System.out.println(count.getName() + ":" + count.getCount());  
\}
System.out.println();  
\}

实战演练:

1、 http://192.168.204.135:9081/solr/select?q=wareName:NBA&facet=on&facet.field=sKind
搜索NBA,然后按照sKind进行分组

2、 联想词;

http://192.168.204.135:9081/solr/select?q=wareName:mp&facet=true&rows=0&facet.prefix=m&facet.field=wareName&facet.limit=10
http://192.168.204.135:9081/solr/select?q=wareName:mp&facet=true&rows=0&facet.prefix=mp3&facet.field=wareName&facet.limit=10
http://192.168.204.135:9081/solr/select?q=wareName:mp&facet=true&rows=0&facet.prefix=mp&facet.field=wareName&facet.limit=10

&nbsp;