`
duanjiangong
  • 浏览: 62866 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

利用lucene做分类统计

阅读更多

现在好多网站需要在搜索结果上进行分类统计,比如招聘网站需要统计出某一关键词下的满足本科的有多少岗位、满足专科的有多少岗位、满足4000-6000薪资的多少岗位等等,这就需要对搜索结果进行分类统计了。但现在一直没有发现有人在lucene上很好的实现这个功能,呵呵,可能是大牛们没有时间研究这个吧。

我在分析了Lucene的源码的基础上开发出了这个功能,因牵扯到公司机密无法透露具体代码,但可以给大家共享一下原理和思路,供大家参加,也许还有更好的方法实现。

思路:我们可以参照lucene里面的排序原理来对lucene的源码进行重构,我们都知道lucene是可以按照不同的字段进行排序的,排序用的字段从哪里来呢?如果我们可以访问到排序的字段是否就可以访问到分类统计的字段呢。访问到分类统计的字段,剩下的工作的就很简单了对吧。大家可以看看Lucene的TopDocCollector类源码,然后再自己实现HitCollector这个抽象类就可以啦,不知道说明白了吗?希望对大家有帮助。

1
0
分享到:
评论
10 楼 xu101q 2011-10-17  
还是不懂啊~~~~ LZ 能否 在清楚一点呢 我用的是3.2的版本
9 楼 oyd 2011-03-22  
FieldCache.DEFAULT.getInts(reader, fieldname);
就这样一句
8 楼 stta04 2010-07-02  
duanjiangong 写道
看来大家还是没有认真阅读啊,看看lucene在排序的时候它是如何得到排序字段的值的。我们来效仿一下,不就解决了吗?

今天仔细去调试了一下源代码,还真的发现这个好东西,以前采用reader取出Document真的是太慢了。非常感谢你的提示。
7 楼 duanjiangong 2009-12-25  
看来大家还是没有认真阅读啊,看看lucene在排序的时候它是如何得到排序字段的值的。我们来效仿一下,不就解决了吗?
6 楼 ybzshizds 2009-12-24  
研究了半天,今天偶然发现了个新东西,bobo-browser(bobo-browse 是一用java写的lucene扩展组件,通过它可以很方便在lucene上实现分组统计功能),然后测试了一下(200W条索引数据),分组查询速度在150ms,基本和不分组时候的查询速度差不多。
5 楼 ybzshizds 2009-12-24  
引用
读取Document这个是不太现实,建议阅读TopDocCollector这个类的源码!

   private ArrayList<int,int> category_count;
   category_count=new ArrayList<String,int>();
  public void Collect(int doc,float score){
   if(score>0.0f){
      Documentd=reader.Document(doc); //这一步是比较耗时的
      String category = d.get("category");
      if(category_count.ContainsKey(category))
        category_count[category]++;
      else
        category_count.add(category,1);
        totalHits++;
        if(hq.Size()<numHits||score>=minScore){
          hq.Insert(newScoreDoc(doc,score));
          minScore=((ScoreDoc)hq.Top()).score;//maintainminScore
        }
      }
  }

lucene查询的时候,在取返回具体document之前,排序,过滤都只是对docId进行操作,一旦涉及到要访问document的具体内容,就很费时间了。分类统计,不通过取document再作相应的操作,那怎么办呢。希望高人提醒。
      
4 楼 ybzshizds 2009-12-24  
大家看看这篇文章吧,已经说的很清楚了,只不过是.net版的lucene,java版的应该是一样的原理。http://www.cnblogs.com/birdshover/archive/2009/01/09/1372906.html
3 楼 ybzshizds 2009-12-23  
根据这个就能得到分类统计的字段吗?
FieldCacheImpl.Entry entry = (factory != null)
      ? new FieldCacheImpl.Entry (field, factory)
      : new FieldCacheImpl.Entry (field, type, locale);
请指教!
2 楼 duanjiangong 2009-10-09  
读取Document这个是不太现实,建议阅读TopDocCollector这个类的源码!
1 楼 stta04 2009-09-30  
我也是这样做的,可发现性能是很大一个问题。不知你在这个HitCollector实现类里是如何做的?我是通过reader取出Document,然后再做取出分类的那个字段的值来做统计

相关推荐

    lucene 分组统计

    ### Lucene 分组统计 #### 一、Lucene 分组统计概述 在 Lucene 的应用场景中,分组统计是一项非常重要的功能。它可以帮助用户快速获取文档集合中的统计数据,例如按类别进行分组并统计每组的数量等。在 Lucene 中...

    lucene高级应用

    通过上述高级应用,开发者可以充分利用Lucene的强大功能,构建出满足复杂需求的搜索引擎。无论是优化索引结构,提升查询效率,还是利用高级特性提供更佳的用户体验,Lucene都提供了丰富的工具和策略。在实际项目中,...

    lucene.netGroup

    为了实现这一功能,开发者通常会利用Lucene.Net的FieldCache和Grouping API。FieldCache用于存储每个文档的特定字段值,而Grouping API则提供了构建和执行分组查询的能力。 在具体实现上,开发者可能首先创建一个...

    Lucene5学习之Facet(续)

    《Lucene5学习之Facet(续)》 在深入探讨Lucene5的Facet功能之前,我们先来了解一下什么是Faceting。...通过不断学习和实践,我们可以更好地利用Lucene5的Facet功能,提升搜索引擎的用户体验和数据分析能力。

    lucene-3.5.0.jar

    - **Faceting**:支持分类浏览,可以快速统计不同分类下的文档数量。 - ** Spell Checking**:拼写检查功能,当用户输入错误的单词时,提供纠正建议。 4. **使用示例** - 创建索引:定义Analyzer,创建Document...

    lucene 5.4.1 官方文档离线版

    - **Faceting**:提供分类统计功能,用于实现如电商网站的商品分类浏览。 - **Highlighter**:高亮显示搜索结果中的匹配部分。 4. **更新和删除**: - **DeleteDocuments**:从索引中删除特定文档。 - **NRT...

    lucene检索文件

    Faceting允许用户对搜索结果进行分类统计,提供更丰富的导航体验。 - **近实时搜索**: 新添加的文档或更新的文档,经过一定的延迟后即可在搜索结果中体现,确保了搜索的时效性。 综上所述,Lucene是一个强大的全文...

    lucene je-analysis jar包

    Lucene是Apache软件基金会的一个项目,它是一个高性能、全文本搜索库,提供了一个简单的API,开发者可以利用这个API在自己的应用程序中实现全文索引和搜索功能。Lucene包含了索引、搜索、分词、排序、高亮、相关性等...

    lucene 资料全集

    6. **过滤器和切面搜索**: 可以通过Filter限制搜索结果,或者利用Facet API进行分类统计。 7. **分词器插件**: Lucene 具有丰富的分词器插件,支持多种语言和自定义分词规则。 通过深入学习和实践上述知识点,你将...

    lucene分组查询优化facet

    总结,Lucene的分组查询(Facet)功能为大数据分析和搜索引擎带来了强大的分类统计能力,通过合理优化,可以在保证用户体验的同时,有效控制资源消耗。理解其原理,掌握优化技巧,是提升Lucene应用性能的关键。

    盘古分词、lucene3.0.3搜索的使用示例v1.3.zip

    盘古分词利用词典和基于统计的分词策略,将输入的中文文本分割成有意义的词汇单元,如词语或短语。它支持自定义词典,能适应各种场景下的分词需求,特别适合处理海量的中文文本数据。 接着,我们引入Lucene 3.0.3。...

    luceneDemo

    在"luceneDemo"中,我们可能能看到这些功能的实现,比如通过FacetsConfig进行分类统计,通过Highlighter来突出显示搜索结果中的关键词,以及使用SpellChecker来自动纠正用户的拼写错误。 此外,Lucene还支持多线程...

    LUCENE分析介绍功能

    总体来说,文章提出了一种融合潜在语义分析、贝叶斯分类和关联规则采掘的BBS文档鉴别方法,通过自然语言处理技术抽取典型短语,利用LSA减少同义词的影响,再通过关联规则采掘提高短语独立性,最后由贝叶斯分类器完成...

    Annotated Lucene 中文版 Lucene源码剖析

    ### Annotated Lucene 中文版 Lucene源码剖析 #### Lucene简介与核心特性 ...通过对上述知识点的学习,开发者不仅可以深入了解Lucene的内部机制,还能更好地利用其提供的功能来构建高效稳定的搜索系统。

    Lucene2.4入门总结

    3. **使用 Faceting**:Lucene 提供了 Facet API,用于实现分类统计和导航,提升用户体验。 4. **多语言支持**:Lucene 支持多种语言的文本处理,通过 LanguageAnalyzer 或第三方库如 Hunspell 可以处理非英文文本...

    Lucene原理与代码分析完整版

    《Lucene原理与代码分析完整版》是一本深入解析开源全文搜索...总结,《Lucene原理与代码分析完整版》这本书是深入了解和掌握Lucene的宝贵资源,通过学习,开发者能够熟练地利用Lucene构建高效、灵活的全文检索系统。

    一个很好的lucene帮助文档,需要的朋友可以来下载-Lucene2.4.1 叶明

    6. **过滤与聚合**:Lucene 还支持过滤器(Filter)和聚合(Faceting)功能,用于按条件筛选结果或统计分类信息。 **叶明的 Lucene2.4.1 文档** 《Lucene2.4.1 叶明》这本帮助文档可能是针对 Lucene 2.4.1 版本的...

    基于lucene的搜索引擎

    本篇毕业论文将深入探讨如何利用Lucene来构建一个功能完备的搜索引擎。 **一、Lucene的基本概念** 1. **索引**: Lucene的核心是建立索引,它将文本数据转化为结构化的、可快速检索的表示形式。索引过程包括分词、...

    lucene.net

    - **Faceting**: 提供分类统计功能,用于实现如商品分类的筛选。 - **Highlighting**: 高亮显示查询匹配的文本,增强用户体验。 - **SpellChecker**: 自动纠错功能,建议用户可能的正确拼写。 - **Multi-field ...

    解密搜索引擎lucene & java

    在Java中,可以利用Weka这样的开源机器学习库,或者直接使用Java版的Scikit-learn库(Smile)来进行文本分类。 文本聚类(Text Clustering)则是无监督学习的一种,用于将相似的文本自动归为一类。K-means、层次...

Global site tag (gtag.js) - Google Analytics