solr c语言,搜索引擎(Solr-搜索详解3)

学习目标

掌握折叠展开结果的用法;

掌握分组结果的用法;

了解solr支持的其他搜索特性

折叠展开结果

什么是折叠展开结果?

问:在商品搜索中,当我们输入关键字,搜索到很多相关的商品文档,当结果中存在大量的同名商品时(不同卖家的),你是希望看到重复的商品罗列还是看到更多的不同商品(同名商品展示一个)?

折叠结果,就是对搜索结果根据某字段的值进行分组去重。

展开结果:在返回结果中附带上折叠结果的展开列表

请看下面查询的结果

http://localhost:8983/solr/techproducts/select?q=*:*&fq={!collapse%20field=price}&expand=true

Solr折叠展开结果

Solr中通过Collapsing query parser 和 Expand component 的组合来提供根据某一字段对搜索结果进行折叠、展开处理。Solr中还提供的结果分组组件也能实现折叠功能,但如果仅是要做折叠展开处理,折叠展开结果性能要优些。

CollapsingQParser  其实是一个后置查询过滤器,对搜索结果根据指定的字段进行折叠处理。它需要的本地参数有:

field:指定折叠字段,必须是单值的String 、int 、float 类型的字段。

min or max:通过min或max指定的数值字段或函数查询来选择每个组的头文档(取最大或最小值的文档)。min、max、sort只可用其一。

sort:指定组内排序规则来选择排在第一的文档作为头文档。默认是选取组中相关性评分最高的文档作为头文档。

nullPolicy:对不包含折叠字段的文档采取什么处理策略:

ignore:忽略,默认选项。

expand:独立为一个组。

collapse:折叠为一个组。

折叠结果示例

fq={!collapse field=group_field}

fq={!collapse field=group_field min=numeric_field}

fq={!collapse field=group_field max=numeric_field}

fq={!collapse field=group_field max=sum(cscore(),numeric_field)}

fq={!collapse field=group_field nullPolicy=collapse sort='numeric_field asc, score desc'}

Solr展开结果

如果你需要在结果中返回每个折叠组的展开列表,在请求中加上参数 expand=true

q=*:*&fq={!collapse%20field=price}&expand=true

展开组件还支持如下参数:

expand.sort:组内排序规则,默认是相关性评分。

expand.rows:每组返回的文档数。默认5

还有 expand.q、expand.fq

结果分组

Solr结果分组

根据某个字段对结果进行分组,每组返回一个头文档。

http://localhost:8983/solr/techproducts/select?fl=id,name&q=solr+memory&group=true&group.field=manu_exact

结果分组请求参数说明:

group :true,对搜索结果进行分组。

group.field :分组字段,必须是单值、索引的字段。

group.func:根据函数查询结果值进行分组(分布式下不可用)。

group.query:指定分组的查询语句,类似 facet.query。

rows:返回的分组数,默认10

start:分页起始行

group.limit:每组返回的文档数,默认1。

group.offset:组内返回的文档的偏移量。

sort:如何排序组。

group.sort:组内排序规则

group.main:用分组结果中的文档作为主结果返回

Solr结果分组-示例

Grouping Results by Field    根据字段进行分组

http://localhost:8983/solr/techproducts/select?fl=id,name&q=solr+memory&group=true&group.field=manu_exact

作为主结果返回

http://localhost:8983/solr/techproducts/select?fl=id,name,manufacturer&q=solr+memory&group=true&group.field=manu_exact&group.main=true

Grouping by Query 根据查询进行分组

http://localhost:8983/solr/techproducts/select?indent=true&fl=name,price&q=memory&group=true&group.query=price:[0+TO+99.99]&group.query=price:[100+TO+*]&group.limit=3

其他搜索特性介绍

Solr其他搜索特性

Result clustering    结果聚合

http://lucene.apache.org/solr/guide/7_3/result-clustering.html

Spatial Search    地理空间搜索

http://lucene.apache.org/solr/guide/7_3/spatial-search.html

Parallel SQL Interface   搜索的SQL接口

http://lucene.apache.org/solr/guide/7_3/parallel-sql-interface.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值