您的位置:首页 > 其它

solr学习第六课---solr中facet的基本应用-基于solr搜索引擎

2013-11-19 12:29 316 查看
一. 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. Field Facet

五. 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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: