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

本文详细介绍了Solr的Facet功能,包括Facet字段的选择标准、配置方法及实战应用。通过合理设置Facet字段,可以提升搜索系统的用户体验。


一.    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





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

艾文教编程

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值