`
hankesi2000
  • 浏览: 96640 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

lucene/solr中查询结果的分组/字段的压缩

阅读更多
原文链接:http://blog.jteam.nl/2011/05/19/search-result-grouping-field-collapsing-in-lucene-solr/#more-3424

在搜索的项目中,我们经常有对搜索结果进行分组或对字段进行压缩的需求。之前的文章提到这个功能已经添加到solr中并成为用户一个非常需要的特性。最近结果分组被作为一个扩展包加入到lucene3.1中,而在4.0中将直接作为一个模块。添加这个功能到lucene中使用起来将会更灵活。目前正在努力将结果分组放入到solr的3.X版本分支中。具体参考SOLR-2524这意味着在solr3.2中我们将可以使用这个功能了!

历史
这个功能起于4年前,分支SOLR-236被创建的时候。那时结果分组关注于在结果集中对拥有相同字段值的文档进行压缩。随着时间的推移,越来越多的人开始使用这个补丁。很多人提交了一些新的特性、调优。而字段的压缩在Jira上作为一个补丁起始于3年前,用户需要对solr打补丁并运行在这个构建的版本上。这种明显是一种错误的方式,以至于在这方面的问题发给了Solr的邮件组。另外,在Jira上有很多关于字段分组的补丁,这让用户很迷惑

去年9月结果分组在4.0-dev版中变的可用。字段压缩功能也被重写(SOLR-1682),并且性能也得到提升。另外,结果分组也被加入,所以这个特性有些小的改变。

最近,正尝试着放入LUCENE-1421。这个Jira创建的目的是暴露结果分组的功能给lucene。在Solr主干中,分组的代码将会被重写,并将分组模块放入到lucene中。在3.x版本中,它已经被作为一个扩展包了。目前还不能支持按方法(function)或查询(query)进行分组。LUCENE-3099已经被创建,不久lucene就可以使用这些功能了。

Lucene的结果分组
Lucene中的分组很容易使用,参考下面的例子。类FirstPassGroupingCollector用来收集每组中有多少个文档;SecondPassGroupingCollector收集有多少个分组。

FirstPassGroupingCollector c1 = new FirstPassGroupingCollector("author", groupSort, groupOffset + topNGroups);
indexSearcher.search(new TermQuery(new Term("content", searchTerm)), c1);
 
Collection<SearchGroup> topGroups = c1.getTopGroups(groupOffset, fillFields);
 
if (topGroups == null) {
   // No groups matched
  return;
}
 
boolean getScores = true;
boolean getMaxScores = true;
boolean fillFields = true;
SecondPassGroupingCollector c2 = new SecondPassGroupingCollector("author", topGroups, groupSort, docSort, docOffset + docsPerGroup, getScores, getMaxScores, fillFields);
    indexSearcher.search(new TermQuery(new Term("content", searchTerm)), c2);
 
TopGroups groupsResult = c2.getTopGroups(docOffset);


如果search的性能耗费大,则可以考虑使用CachingCollector。这个cache可以缓存第一次search时的文档Id和评分,并提供给之后的查询使用。使用方法请参考grouping documentation


有另一个收集器叫AllGroupsCollector,它可以收集查询结果的所有组。下面的例子为得到各个分组收集的总数量:
// First pass search has been executed
boolean getScores = true;
boolean getMaxScores = true;
boolean fillFields = true;
AllGroupsCollector c3 = new AllGroupsCollector("author");
SecondPassGroupingCollector c2 = new SecondPassGroupingCollector("author", topGroups, groupSort, docSort, docOffset + docsPerGroup, getScores, getMaxScores, fillFields);
indexSearcher.search(new TermQuery(new Term("content", searchTerm)), MultiCollector.wrap(c2, c3));
 
TopGroups groupsResult = c2.getTopGroups(docOffset);
groupsResult = new TopGroups(groupsResult, c3.getGroupCount());


通过MultiCollectorAllGroupsCollector能很好的封装SecondPassGroupingCollector AllGroupsCollector 也能独立的在其他的收集器中使用。

结果分组在solr中的使用
现在Solr主干上还没有使用lucene 分组模块;它使用它自己的分组模块。Solr还没有使用lucene的分组模块的原因,是它还没有对function和query的支持。然而Solr3.1还没有实现分组的支持,用户仍需要自己下分支然后编译。更坏的是,很多用户还在使用过时的补丁SOLR-236,这是我为什么创建SOLR-2524的原因.

SOLR-2524 分支涉及到集成lucene的扩展包到solr3.x分支中。这个版本也为集成分组模块的主干版本到Solr4.0中作为参考。Solr3.x的主干分组将支持相同的响应格式和请求参数,具体描述请参见Solr FieldCollapse wiki page;它还不支持的功能还是function和query。

如果运行良好,这个分支将会提交到Solr3.2版本中,Solr的用户就可以直接使用啦

篇外话:其实这个功能在3.2里没发布,改到3.3了。。。



分享到:
评论

相关推荐

    Lucene&solr.zip

    本篇将详细阐述Lucene和Solr的基本概念、工作原理以及如何在实际应用中使用它们。 **1. Lucene简介** Lucene是一个由Apache软件基金会开发的全文检索库,它提供了高效的、可扩展的文本搜索功能。Lucene的核心功能...

    solr配置指南

    此外,还需要理解Solr的核心概念,如索引、查询、字段类型和配置文件等,这些都是进行高级操作和优化所必需的。一旦完成基础配置,你可以根据需求创建多个Solr核心,每个核心可以独立管理和配置,以满足不同数据集的...

    solr的搭建入门

    在`server/solr/mycore/conf`目录下,你可以找到各种配置文件,如`schema.xml`定义了字段及其属性,`solrconfig.xml`配置了索引和查询行为。根据实际应用需求修改这些配置。 6. **导入数据** 使用Solr的Data ...

    SOLR简要配置

    - **命中高亮**:使用`hl`参数可以对查询结果中的匹配部分进行高亮显示。 - **处理多语言**:Solr支持多种语言的分词和排序,通过调整分析器配置可以处理中文、英文等不同语言的索引。 7. **监控和管理** - Solr...

    tomcat下部署solr

    `schema.xml`文件是Solr的核心配置文件,定义了索引和查询的字段类型、字段及它们的属性。在本例中,我们有一个名为`schema.xml`的文件,这可能是Solr实例的一个自定义配置。通常,这个文件位于`solr/x.x.x/server/...

    solr压缩7.3.1版

    在“solr压缩7.3.1版”中,我们可以找到一系列用于部署和运行Solr服务器的文件。这个版本是Solr历史的一个稳定里程碑,为用户提供了强大的搜索和数据处理能力。 首先,Solr的核心特性包括: 1. **全文检索**:Solr...

    solr 5.0搭建 和使用 ik分词

    Solr 5.0是Apache Lucene项目的一个子项目,是一个高性能、全文检索服务器,用于构建企业级的搜索应用。本篇文章将详细讲解如何搭建Solr 5.0,并使用IK分词器进行中文分词处理,提升搜索效果。 首先,我们需要下载...

    SOLR搭建企业搜索平台

    SOLR(Apache Solr)是一款开源的企业级全文搜索引擎,基于Lucene库,提供高效、可扩展的搜索和分析功能。本文将详细阐述如何利用SOLR搭建一个企业搜索平台,包括所需环境、配置步骤以及中文分词的设置。 一、SOLR...

    Solr学习笔记。。

    Solr 是一个开源的全文搜索服务器,由Apache Lucene项目维护。它提供了高效、可扩展的搜索和分析功能,常用于大数据量的全文检索、数据分析和分布式搜索应用。本篇文章将详细探讨Solr的安装运行、添加分词器以及配置...

    solr+tomcat处理后的简易部署+说明文档(下)

    核心的配置文件通常位于`server/solr/configsets`目录下,包括`schema.xml`(定义字段和字段类型)、`solrconfig.xml`(配置索引和查询行为)等。 7. **上传数据**:你可以使用Solr的HTTP API或者Solr Admin界面...

    Solr安装与配置solr.rar

    Solr是中国Apache软件基金会开发的一款开源全文搜索引擎,它基于Java平台,是Lucene的一个扩展,提供了高可扩展性和高性能的搜索服务。本压缩包“Solr安装与配置solr.rar”包含了Solr的安装和配置步骤,对于理解和...

    自己搭建的Solr环境

    你可以在Solr管理界面的“Query”选项卡中尝试这些查询。 为了提高性能和可扩展性,Solr支持分布式部署。通过配置多个Solr节点并使用SolrCloud模式,你可以实现数据的自动分片、复制和故障恢复,从而处理大规模的...

    solr环境搭建和中文分词器IK配置

    7. **测试分词效果**:现在可以向`my_core`中添加数据,并在查询时使用`content`字段进行搜索。通过分词器,中文文本会被正确地分词,提高搜索的准确性。 总结一下,本教程涵盖了Solr 7.2.1的安装和IKAnalyzer分词...

    支持solr5.5 solr6.0中IK分词需要的资料

    2. **解压并复制到Solr目录**:将下载的IK分词器解压缩后,将`lucene-analyzers-ik`目录复制到Solr的`server/solr/lib`目录下。 3. **配置分析器**:在Solr的`schema.xml`或`managed-schema`文件中,为需要使用IK...

    Solr安装与配置

    确保提交的文件名与之前创建的分词文档相匹配,并且索引字段的名称在 Solr 配置和分词文档中一致。 完成以上步骤后,你就可以通过 Solr 的 Web 界面进行搜索测试,验证分词配置是否生效。如果你遇到乱码问题,检查 ...

    solr部署教程

    6. 结果分组:按类别或字段对搜索结果进行分组,便于用户浏览。 7. 统计和排序:计算相关度、频次等信息,对结果进行排序。 总之,Solr是一款强大且灵活的全文搜索引擎,适合用于构建高性能的企业级搜索解决方案。...

    solr5.4开发环境完整配置

    Solr 5.4 是一个基于 Lucene 的全文搜索引擎服务器,它提供了强大的搜索功能和管理接口。在本文中,我们将详细探讨如何配置 Solr 5.4 开发环境,包括安装、配置、以及数据导入,同时也会提及 mmseg4j 分词器的使用。...

Global site tag (gtag.js) - Google Analytics