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
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
相关文章推荐
- solr学习入门---积分商城基于Solr的搜索引擎优化
- solr facet查询及solrj 读取facet数据【facet.prefix应用:搜索引擎拼写提示(也可用suggest);Solr 默认 requestHandler已包含 Facet 组件】
- solr学习第三课----solr索引维护-基于solr搜索引擎
- solr学习第七课----solr之数据库数据导入生成索引(DataImportHandler)-基于solr搜索引擎
- 基于Lucene的Solr服务搜索引擎应用(散乱)
- 【基于C++和Python的Opencv3学习笔记之基本图形的绘制】
- vs2010 学习Silverlight学习笔记(3):一些控件的基本应用
- 我的php学习笔记(二)php基本数据类型、基本语法和基本运算类型及其应用
- solr学习之一 搜索基本知识
- lucene&solr cache在sort、facet等方面的应用解析
- solr安装和基本应用
- 基于经验的跨模态学习及其在服务机器人中的应用
- 学习Python基础的第02天,依然是基于Ubunt的Linux操作系统基本认知
- openshift/origin学习记录(10)——基于已有镜像部署应用
- 基于第三方应用的高并发HAproxy简介及基本配置
- 《Javascript权威指南》十六学习笔记:BOM资源---BOM基本应用
- 集成 PHP 应用和 Solr 搜索引擎
- MongoDB副本集学习(二):基本测试与应用
- php入门学习知识点四 PHP正则表达式基本应用
- Python机器学习应用 | 基本分类模型