文档章节

搜索引擎(Solr-搜索详解3)

这很耳东先生
 这很耳东先生
发布于 03/06 19:49
字数 1047
阅读 163
收藏 0

学习目标

掌握折叠展开结果的用法;
掌握分组结果的用法;
了解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
博文 115
码字总数 308800
作品 0
广州
私信 提问
搜索引擎(Solr-部署详解)

Solr两种部署模式介绍 Solr的两种部署模式 Solr程序包安装好后,可以以两种模式来启动solr服务器: 1.Standalone Server 独立服务器模式 适用于数据规模不大的场景 2.SolrCloud 分布式集群模...

这很耳东先生
02/14
48
0
搜索引擎(Solr-模式详解)

Schema介绍 Schema 是什么? 问题1:在lucene中我们要对文档字段进行索引存储,需要如何做? 问题2:现在我们使用Solr搜索服务平台了,不需要编码了,还需要定义如何索引存储字段吗? 需要一...

这很耳东先生
02/15
26
0
搜索引擎(Solr-搜索详解)

学习目标 1.掌握SOLR的搜索工作流程; 2.掌握solr搜索的表示语法及查询解析器 3.熟悉solr搜索的JSON格式 API Solr搜索流程介绍 回顾,使用 lucene进行搜索的步骤: Solr搜索的工作流程 查看内...

这很耳东先生
02/27
133
0
Solr简单介绍

简介 Solr是一个高性能,采用Java5开发,Solr基于Lucene的全文搜索服务器。同时对其进行了扩展,提供了比Lucene更为丰富的查询语言,同时实现了可配置、可扩展并对查询性能进行了优化,并且提...

邵鸿鑫
2016/06/29
0
0
开源搜索平台选型:ElasticSearch、Solr

由于系统积累的数据量越来越多(如访问日志、log4j打印的日志等)且散布在各应用的各服务器中,使得日志的查看、存储管理变得非常复杂,不得不去各机器上查找与存储管理。有没有一种平台可以...

yown
2017/05/29
0
0

没有更多内容

加载失败,请刷新页面

加载更多

5 分钟快速学习,缓存一致性优化方案!

缓存操作 读缓存 读缓存可以分为两种情况命中(cache hit)和未命中(cache miss): 缓存命中 首先从缓存中获取数据 将缓存中的数据返回 缓存未命中 首先从缓存中获取数据 此时缓存未命中,...

架构文摘
14分钟前
4
0
【从入门到放弃-ZooKeeper】ZooKeeper实战-分布式锁-升级版

设计 我们依然实现java.util.concurrent.locks.Lock接口。 和上一文中实现方式不同的是,我们使用ZooKeeper的EPHEMERAL_SEQUENTIAL临时顺序节点。 当首次获取锁时,会创建一个临时节点,如果...

阿里云官方博客
15分钟前
3
0
inner join 和 union all 做的汇总区别

inner join CREATE OR REPLACE VIEW M_INVENT_BARCODE_DIFF ASSELECT "INV_PART_NO","INV_ONHAND","INV_LOCATION","PART_NO","BAR_ONHAND","BAR_LOCATION"FROM (SELECT m.part_no AS......

donald121
21分钟前
4
0
EMC 设计经验总结

整体布局 1、高速、中速、低速电路要分开; 2、强电流、高电压、强辐射元器件远离弱电流、低电压、敏感元器件; 3、模拟、数字、电源、保护电路要分开; 4 、多层板设计,有单独的电源和地平...

demyar
24分钟前
3
0
支付宝高级Java现场面试35题:页锁+死锁+集群+雪崩+负载等

年底是冲刺大厂的良机,这个时间点大部分人都在观望年终奖与加薪幅度,看情况再伺机而动,人才市场的竞争反而没那么激烈。 获悉到支付宝近期有HC放出,我通过内推渠道,得到了支付宝的面试机...

mikechen优知
27分钟前
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部