- 浏览: 284599 次
- 性别:
- 来自: 湖南岳阳
最新评论
-
ternus:
兄弟,我用boboBrowse 也遇到了排序的问题,上线了讨论 ...
lucene 分组 bobo-Browse 排序的问题 -
luli0822:
Awesome bookmarks of those guru ...
流行的jQuery信息提示插件(jQuery Tooltip Plugin) -
shenbai:
如果你要在前台运行,你应该run得是ElasticSearch ...
ElasticSearch 源码分析 环境入门 -
cl1154781231:
<s:peroperty value="#at ...
关于Struts2中标签的一些心得 -
RonQi:
转载的吗?http://blog.csdn.net/stray ...
利用bobo-browse 实现lucene的分组统计功能
bobo-browse 是一用java写的lucene扩展组件,通过它可以很方便在lucene上实现分组统计功能。
可以从 http://code.google.com/p/bobo-browse/ 上下载和查看相关文档。
下面介绍如何使用:
第一步:设置相关配置文件
bobo-browse 使用了spring,这里主要配置bobo.spring和field.xml两个文件。可以从他的源码例子中找到这两个文件,参考它做相应的修改。
bobo.spring
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> <bean id="color" class="com.browseengine.bobo.facets.impl.SimpleFacetHandler"> <constructor-arg value="color" /> </bean> <bean id="category" class="com.browseengine.bobo.facets.impl.SimpleFacetHandler"> <constructor-arg value="category" /> </bean> <bean id="city" class="com.browseengine.bobo.facets.impl.PathFacetHandler"> <constructor-arg value="city" /> <property name="separator" value="/" /> </bean> <bean id="makemodel" class="com.browseengine.bobo.facets.impl.PathFacetHandler"> <constructor-arg value="makemodel" /> <property name="separator" value="/" /> </bean> <bean id="year" class="com.browseengine.bobo.facets.impl.RangeFacetHandler"> <constructor-arg value="year" /> <constructor-arg value="true" /> </bean> <bean id="price" class="com.browseengine.bobo.facets.impl.RangeFacetHandler"> <constructor-arg value="price" /> <constructor-arg> <bean class="com.browseengine.bobo.facets.data.PredefinedTermListFactory"> <constructor-arg value="java.lang.Float" /> <constructor-arg value="00000000000000000000" /> </bean> </constructor-arg> <constructor-arg value="true" /> </bean> <bean id="mileage" class="com.browseengine.bobo.facets.impl.RangeFacetHandler"> <constructor-arg value="mileage" /> <constructor-arg> <bean class="com.browseengine.bobo.facets.data.PredefinedTermListFactory"> <constructor-arg value="java.lang.Integer"/> <constructor-arg value="00000000000000000000" /> </bean> </constructor-arg> <constructor-arg> <list> <value>[* TO 12500]</value> <value>[12501 TO 15000]</value> <value>[15001 TO 17500]</value> <value>[17501 TO *]</value> </list> </constructor-arg> </bean> <bean id="tags" class="com.browseengine.bobo.facets.impl.MultiValueFacetHandler"> <constructor-arg value="tags" /> </bean> <bean id="handlers" class="java.util.ArrayList"> <constructor-arg> <list> <ref bean="color" /> <ref bean="category" /> <ref bean="city" /> <ref bean="makemodel" /> <ref bean="year" /> <ref bean="price" /> <ref bean="mileage" /> <ref bean="tags" /> </list> </constructor-arg> </bean> </beans>
field.xml(前两天收到软件原作者John Wang的邮件 说field.xml不是必须的。 )
<?xml version="1.0" encoding="UTF-8"?> <field-info> <field> <name type="simple">category</name> <param name="preloadcache" value="true"/> </field> <field> <name type="path">city</name> <param name="preloadcache" value="true"/> </field> <field> <name type="simple">color</name> <param name="preloadcache" value="true"/> </field> <field> <name type="path">makemodel</name> <param name="preloadcache" value="true"/> </field> <field> <name type="range">price</name> <param name="preloadcache" value="false"/> <param name="value_type" value="float"/> <param name="format" value="00000000000000000000" /> <param name="display" value=".00"/> </field> <field> <name type="range">year</name> <param name="preloadcache" value="false"/> <param name="value_type" value="integer"/> <param name="format" value="00000000000000000000" /> </field> <field> <name type="range">mileage</name> <param name="preloadcache" value="false"/> <param name="value_type" value="integer"/> <param name="format" value="00000000000000000000" /> </field> <field> <name type="multi">tags</name> <param name="maxVal" value="15"/> <param name="preloadcache" value="true"/> </field> </field-info>
该组件提供了五种FacetHandler 来处理上面配置中的字段,字段中的一些属性设置可以参考他的api文档。
simple: (com.browseengine.bobo.facets.impl.SimpleFacetHandler ) Used when there is a discrete set of facet values, for example: color, with values: red,green,blue,white,black. Each document can have only 1 value in this field. When being indexed, this field should not be tokenized.
该字段的值只能对应一个分类或分组,并且该字段在索引是必须为非分词的。
multi: (com.browseengine.bobo.facets.impl.MultiValueFacetHandler ) Similar to simple type field, multi field allows a document to have multiple values. When being indexed, this field can be tokenized. Or alternatively, one can index multiple values in multiple document fields under the same field name.
该字段可以对应多个分类,并且字段需要分词的。
compact multi: (com.browseengine.bobo.facets.impl.CompactMultiValueFacetHandler ) Same as MultiValueFacetHandler, multiple values are allowed, the total possible values are limited to 32. However, this is more efficient than MultiValueFacetHandler and has a smaller memory footprint.
感觉应该和multi类似,我还没用过。
path: (com.browseengine.bobo.facets.impl.PathFacetHandler ) Used to denote facet values with hierarchical structure, for example: "A/B/C/D" Each document can have only 1 value in this field. When being indexed, this field should not be tokenized.
该字段我的理解是这样的,当前值属于:A(顶级分类)=>B(二级分类)=>C(三级分类)=>D(四级分类),字段必须为未分词的。
range: (com.browseengine.bobo.facets.impl.RangeFacetHandler ) Used to denote a range of facet, e.g. dates, prices etc. Each document can have only 1 value in this field. When being indexed, this field should not be tokenized. Furthermore, the values need to be formatted to ensure sorting by lexical order is the same as the value order.
范围,不用我介绍了,上面的bobo.spring里有这个例子。
参考它自带的例子 将你要进行分组的字段 设置好bobo.spring和field.xml这两个文件。
同时这两个文件要放在和索引文件的同一目录下。
第二步:搜索实现
字段配置写好之后,就可以在搜索的java文件中加上一些代码就可以得到统计结果了。
参考文档 http://code.google.com/p/bobo-browse/wiki/GettingStarted
比如我要获取color字段按多到少的10个值
// opening a lucene index Directory idx = FSDirectory.open(new File("myidx")); IndexReader reader = IndexReader.open(idx); // decorate it with a bobo index reader BoboIndexReader boboReader = BoboIndexReader.getInstance(reader); // creating a browse request BrowseRequest br=new BrowseRequest(); br.setCount(10); br.setOffset(0); // parse a query QueryParser qp = new QueryParser(fields,new StandardAnalyzer()); Query q=qp.parse(keyword); br.setQuery(q); // add the facet output specs FacetSpec colorSpec = new FacetSpec(); colorSpec.setMaxHitCount(10); colorSpec.setOrderBy(FacetSortSpec.OrderHitsDesc); br.setFacetSpec("color",colorSpec); // perform browse Browsable browser=new BoboBrowser(boboReader); BrowseResult result=browser.browse(br); int totalHits = result.getNumHits(); BrowseHit[] hits = result.getHits(); Map<String,FacetAccessible> facetMap = result.getFacetMap(); FacetAccessible colorFacets = facetMap.get("color"); List<BrowseFacet> facetVals = colorFacets.getFacets();
经本人测试,效率还不错 ,有问题欢迎与我站内联系。
效果 可以参考它上面介绍的网站 http://www.simplyhired.com/a/jobs/list/o-13201
评论
问题已解决,但是我还想了解的是如何去自定义统计方式?
Exception in thread "main" java.lang.NullPointerException
at net.paoding.analysis.analyzer.PaodingTokenizer.close(PaodingTokenizer.java:164)
at org.apache.lucene.queryParser.QueryParser.getFieldQuery(QueryParser.java:571)
at org.apache.lucene.queryParser.QueryParser.Term(QueryParser.java:1362)
at org.apache.lucene.queryParser.QueryParser.Clause(QueryParser.java:1250)
at org.apache.lucene.queryParser.QueryParser.Query(QueryParser.java:1178)
at org.apache.lucene.queryParser.QueryParser.TopLevelQuery(QueryParser.java:1167)
at org.apache.lucene.queryParser.QueryParser.parse(QueryParser.java:182)
at test.TestBoBo.main(TestBoBo.java:44)
发表评论
-
全文检索的基本原理
2010-02-25 10:22 876一、总论 根据http://lucene.apache.or ... -
lucene 分组 bobo-Browse 排序的问题
2010-02-01 16:18 2223今天碰到了一个问题,用bobo分组后对价格升序 居然100 ... -
开源搜索引擎
2010-02-01 14:31 1695开放源代码搜索引擎为 ... -
lucene中的filter器群组及其缓存大盘点
2010-01-20 23:18 1201lucene中的filter其实并不起眼,大家对其对性能的影响 ... -
lucene Field部分参数设置含义
2009-11-07 17:51 1249<script type="text/ja ... -
刚下载,开始学习lucene时看的文章
2009-09-04 18:43 1431Lucene 2.0.0下载安装及测试 【下载】 下载链接 ... -
Lucene-2.3.1 阅读学习(42)
2009-09-04 18:42 944关于Hits类。 这个Hits类 ... -
Lucene 2.3.1 阅读学习(41)
2009-09-04 18:42 1411当执行Hits htis = search(query);这一 ... -
Lucene-2.3.1 源代码阅读学习(40)
2009-09-04 18:41 988关于Lucene检索结果的排序问题。 已经知道,Lucene ... -
Lucene-2.3.1 源代码阅读学习(39)
2009-09-04 18:41 1155关于Lucene得分的计算。 在IndexSearcher类 ... -
Lucene-2.3.1 源代码阅读学习(39)
2009-09-04 18:38 565关于Lucene得分的计算。 在IndexSearcher类 ... -
Lucene-2.3.1 源代码阅读学习(38)
2009-09-04 18:38 922关于QueryParser。 QueryParser是用来解 ... -
Lucene-2.3.1 源代码阅读学习(37)
2009-09-04 18:37 630关于MultiTermQuery查询。 这里研究继承自Mul ... -
Lucene-2.3.1 源代码阅读学习(36)
2009-09-04 18:37 808关于MultiTermQuery查询。 ... -
Lucene-2.3.1 源代码阅读学习(35)
2009-09-04 18:36 842关于MultiPhraseQuery(多短语查询)。 Mul ... -
Lucene-2.3.1 源代码阅读学习(34)
2009-09-04 18:36 640关于PhraseQuery。 PhraseQuery查询是将 ... -
Lucene-2.3.1 源代码阅读学习(33)
2009-09-04 18:35 870关于范围查询RangeQuery。 ... -
Lucene-2.3.1 源代码阅读学习(32)
2009-09-04 18:35 1155关于SpanQuery(跨度搜索),它是Query的子类,但是 ... -
Lucene-2.3.1 源代码阅读学习(31)
2009-09-04 18:34 873关于前缀查询PrefixQuery(前缀查询)。 准备工作就 ... -
Lucene-2.3.1 源代码阅读学习(30)
2009-09-04 18:34 1063关于Query的学习。 主要使用TermQuery和Bool ...
相关推荐
本文将详细介绍如何使用Bobo-Browse在Lucene中实现Faceting功能。 一、Lucene Facet简介 Lucene Facet是Lucene的一个扩展,它允许用户通过多维度的分类来过滤和浏览搜索结果,这种分类方式有助于用户快速定位所需...
基于bobo-browse参照path统计方式实现类扩展自定义自己的实现类,可实现分类编码每4位为一个级别:如:1000000100301001 即可统计出1000、10000001、100000010030、1000000100301001,也可选择从第几级开始最多统计...
在"一步一步跟我学习lucene(12)---lucene搜索之分组处理group查询"中,我们将重点关注如何利用Lucene实现这一高级搜索功能。 首先,Lucene是一个开源全文搜索引擎库,它为Java开发者提供了构建高效、可扩展的搜索...
lucene-grouping-3.5.0.jar分组统计+分类统计插件 分组统计+分类统计
《Apache Lucene核心技术详解:从2.9.4到3.4.0的演变》 Apache Lucene,作为开源的全文检索库,是Java...随着版本的迭代,Lucene不仅提供了更多的功能,也在性能和稳定性上不断优化,为信息检索领域提供了强大的支持。
Webx3不仅提供了MVC模式的基础架构,还支持自定义拦截器、AOP(面向切面编程)等功能,使得开发者可以方便地实现复杂的业务逻辑和控制流程。在"paoding-webx3-solr-lucene"项目中,Webx3作为前端控制器,负责接收...
"je-analysis-1.5.3"可能会负责对输入文本进行预处理,如分词,然后"lucene-core-2.9.2"则会利用这些预处理结果建立索引,进行高效的查询和匹配。这样的系统常见于内容管理系统、搜索引擎、数据分析平台等。 在实际...
本文将深入探讨"je-analysis-1.5.3"和"lucene-core-2.4.1"这两个分词组件,以及它们在相关场景中的应用。 首先,让我们了解什么是分词。分词,即词语切分,是自然语言处理(NLP)中的基本任务之一,它的目标是将...
基于java的开发源码-搜索引擎 Lucene.zip 基于java的开发源码-搜索引擎 Lucene.zip 基于java的开发源码-搜索引擎 Lucene.zip 基于java的开发源码-搜索引擎 Lucene.zip 基于java的开发源码-搜索引擎 Lucene.zip 基于...
在 Lucene 的应用场景中,分组统计是一项非常重要的功能。它可以帮助用户快速获取文档集合中的统计数据,例如按类别进行分组并统计每组的数量等。在 Lucene 中实现这一功能的主要方式是通过 `FieldCache`。 #### 二...
`laravel-lucene-search`是针对Laravel 4.2版本设计的一个软件包,它将Apache Lucene(一个高性能、全功能的文本搜索引擎库)与Laravel的Eloquent ORM(对象关系映射)相结合,使得在Laravel应用中实现全文搜索变得...
开发自己的搜索引擎---Lucene+Heritrix(第2版)。超星导出来的,非常清晰。CSDN上传限制60MB,点击我的用户名查看part2。
**luke——Lucene索引数据查看器** Luke是一款强大的Lucene索引浏览器,它为开发者和搜索引擎优化人员提供了一种直观的方式来查看和分析由Apache Lucene创建的索引。Lucene是一个开源全文检索库,广泛应用于各种...
- **QueryParser模块**:实现了查询解析功能,如`lucene-queryparser-4.7.0.jar`。 - **Memory模块**:提供了内存中的索引支持,适用于小型应用或测试,如`lucene-memory-4.7.0.jar`。 - **Miscellaneous模块**:...
lucene-analyzers-3.3.0.jar lucene-benchmark-3.3.0.jar lucene-core-3.3.0.jar lucene-demo-3.3.0.jar lucene-grouping-3.3.0.jar lucene-highlighter-3.3.0.jar lucene-icu-3.3.0.jar lucene-instantiated-3.3.0....
4. **分词和索引**:利用Lucene的Analyzer对Field内容进行分词,然后将这些词添加到对应的Document中。最后,使用IndexWriter将所有Document写入Lucene索引。 5. **查询与检索**:用户输入查询时,使用Lucene的...
【标题】"hibernate-hql-lucene-1.0.1.Final.zip" 提供的是一个关于Hibernate HQL与Lucene集成的开源项目版本,主要用于在Java应用程序中实现高效、复杂的全文搜索功能。 【描述】"pact-jvm.zip,pact模型" 指的是...
它是一个开源项目,专为.NET Framework设计,实现了Java版本Lucene的主要功能,使得.NET开发者能够轻松地在他们的应用程序中集成高级搜索功能。"Incubating-Apache-Lucene.Net-2.0-004-11Mar07.src.zip"是Lucene.Net...
《深入理解Luke:洞察Lucene索引文件》 在信息技术领域,搜索引擎的高效运作离不开对数据的快速检索,而Lucene作为开源全文检索库,扮演了核心角色。在这个过程中,Luke工具提供了一种直观的方式,让我们能够查看和...
本项目将带你深入学习如何实现这样的功能,并结合lucene全文检索引擎来增强其搜索性能。 首先,智能提示框的核心是实现自动补全功能。这通常涉及到前端和后端的交互。在前端,我们可以使用JavaScript库,如jQuery ...