首页 > 其他分享 >利用bobo-browse 实现lucene的分组统计功能

利用bobo-browse 实现lucene的分组统计功能

时间:2023-09-07 12:32:33浏览次数:43  
标签:bobo browse lucene field values new com


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="catCode" class="com.browseengine.bobo.facets.impl.PathFacetHandler">
   <constructor-arg value="catCode" />
   <property name="separator" value="/" />
  </bean>
  
  <bean id="handlers" class="java.util.ArrayList">
   <constructor-arg>
    <list>
     <ref bean="catCode" />
    </list>
   </constructor-arg>
  </bean>
 </beans>


 

field.xml(前两天收到软件原作者John Wang的邮件 说field.xml不是必须的。)

<?xml version="1.0" encoding="UTF-8"?>
 <field-info>
  <field>
   <name type="path">catCode</name>
       <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

从转来的文章的例子,好像有的方法已不适用了,可能原作者采用的JDK和boboBrowser版本与我的不同。下面是我的测试代码。

/**
   * @param args
   */
  public static void main(String[] args) {
   Directory idx;
   try {
    idx = FSDirectory.getDirectory(new File("D://DATAMANAGER//INDEX//OAKSYSTEM"));
    IndexReader reader = IndexReader.open(idx,true);   
    // decorate it with a bobo index reader   
    BoboIndexReader boboReader = BoboIndexReader.getInstance(reader);  
    Browsable browser=new BoboBrowser(boboReader);   
    // creating a browse request   
    BrowseRequest br=new BrowseRequest();   
    br.setCount(10);   
    br.setOffset(0);   
    // parse a query   
    QueryParser qp = new QueryParser("docName",new StandardAnalyzer());  
    Query q=qp.parse("广");   
    br.setQuery(q);    
    // add the facet output specs   
    FacetSpec colorSpec = new FacetSpec();    
    colorSpec.setMaxCount(10);   
    colorSpec.setOrderBy(FacetSortSpec.OrderHitsDesc);    
    br.setFacetSpec("catCode",colorSpec);  
    // perform browse   
    
    BrowseResult result=browser.browse(br);  
    int totalHits = result.getNumHits();   
    BrowseHit[] hits = result.getHits();   
    System.out.println("totalHits:"+totalHits+";hits="+hits.toString());
    Map<String,FacetAccessible> facetMap = result.getFacetMap();   
    FacetAccessible colorFacets = facetMap.get("catCode");  
    List<BrowseFacet> facetVals = colorFacets.getFacets();  
    for(java.util.Iterator<BrowseFacet> iter=facetVals.iterator();iter.hasNext();){
     BrowseFacet bf = (BrowseFacet)iter.next();
     System.out.print(bf.getValue()+"="+bf.getHitCount()+",");
    }
   } catch (IOException e) {
    e.printStackTrace();
   } catch (BrowseException e) {
    e.printStackTrace();
   } catch (ParseException e) {
    e.printStackTrace();
   }   
  
  }

 

 

经本人测试,效率还不错 ,有问题欢迎与我站内联系。

效果可以参考它上面介绍的网站http://www.simplyhired.com/a/jobs/list/o-13201

获取源码:http://sourceforge.net/projects/bobo-browse/develop

api:http://test.project-voldemort.com:8080/job/bobo-trunk/javadoc/

标签:bobo,browse,lucene,field,values,new,com
From: https://blog.51cto.com/u_2544485/7395958

相关文章

  • Lucene3.0.2高亮显示报:java.lang.reflect.InvocationTargetException
    项目原导入包:lucene-core-3.0.2.jarlucene-highlighter-3.0.2.jar采用TermPositionVector位置方式进行高亮显示,主要代码如下:     TermPositionVectortermFreqVector=(TermPositionVector)reader.getTermFreqVector(id,fieldName);    TokenStreamtokenStream=Toke......
  • 全面讲述Lucene3.0的Lucene In Action(第二版)出来了
     此版为图灵的MEAP版本,感兴趣的赶紧下哦……源代码文件太大,不传了LuceneInAction2ndEditionMEAP.rar(4.1MB)下载次数:634Lucene3.0介绍博客:     LeftNotEasy:    瓜蛙人:http://hxraid.javaeye.com/category/107117......
  • 《自己动手建搜索引擎》日志分析类代码解析与修正为兼容lucene3.0.2
    搜索日志是用来分析用户搜索行为和信息需求的重要依据。一般记录如下信息:搜索关键字用户来源IP本次搜索返回结果数量搜索时间其他需要记录的应用相关信息  例如:搜索时间|日志类型|搜索类型|搜索关键字|IP地址|本次搜索返回结果数量, 存放日志文件内容如下:2008-04......
  • 在应用中加入全文检索功能——基于Java的全文索引引擎Lucene简介 [摘]
    作者:车东关键词:Lucenejavafull-textsearchengine Chinese wordsegment内容摘要:Lucene是一个基于Java的全文索引工具包。基于Java的全文索引引擎Lucene简介:关于作者和Lucene的历史全文检索的实现:Luene全文索引和数据库索引的比较中文切分词机制简介:基于词库和自动切分......
  • 泛微E-cology9 browser.jsp SQL注入漏洞QVD-2023-5012
    漏洞简介泛微e-cology9存在SQL注入漏洞,攻击者可利用该漏洞获取数据库敏感信息。影响版本泛微e-cologyV9<10.56漏洞复现fofa语法:app="泛微-协同商务系统"登录页面:POC:POST/mobile/%20/plugin/browser.jspHTTP/1.1Host:115.236.39.115:8088User-Agent:Mozilla/5.0(W......
  • WPF ComboBox SelectionChanged 重复执行的问题
    参考:WPFTabControlSelectionChanged重复执行的问题-一!雨-博客园(cnblogs.com)添加如下代码privatevoidComboBox_SelectionChanged(objectsender,SelectionChangedEventArgse){e.Handled=true;} 如果采用MVVM模式,在当前......
  • Lucene初使用
    其中用到的几个jar包 相关代码如下:复制代码packagecom.eplant;importjava.io.IOException;  importorg.apache.lucene.analysis.SimpleAnalyzer;  importorg.apache.lucene.document.Document;  importorg.apache.lucene.document.Field;  importo......
  • Lucene:基于Java的全文检索引擎简介
    Lucene是一个基于Java的全文索引工具包。基于Java的全文索引引擎Lucene简介:关于作者和Lucene的历史全文检索的实现:Luene全文索引和数据库索引的比较中文切分词机制简介:基于词库和自动切分词算法的比较具体的安装和使用简介:系统结构介绍和演示HackingLucene:简化的查询分析器,删......
  • windows 桌面GUI自动化- 12.pywinauto 组合框控件ComboBox操作
    前言pywinauto组合框控件ComboBox操作场景记事本-另存为-编码选择,下图这种就是组合框控件ComboBoxselect选择官网给的教程是通过select选择选项示例frompywinautoimportApplicationapp=Application('uia').start("notepad.exe")win=app.window(title_re="......
  • webbrowser显示xml, xml通过xslt转xhtml
    为WebBrowser控件增加显示XML文档接口(c#)ShowXMLinWebBrowsercontrol https://learn.microsoft.com/en-us/answers/questions/1181957/show-xml-in-webbrowser-controlViewXMLFilesEasilywithXmlGridViewControlhttps://www.codeproject.com/articles/16497/view-xml......