bobo-browse 的分组统计(Faceted Search)

基于lucene的bobo-browse 的分组统计(Facet Search)

2010-10-25

转载注明出处


下载编译按照步骤:
http://code.google.com/p/bobo-browse/wiki/GettingStarted

git安装参照
http://rabbit9898.iteye.com/admin/blogs/789809


编译后dist目录下生成jar

测试示例的Java Maven程序

package search.testtry.bobo;

import java.io.File;
import java.io.IOException;
import java.util.Arrays;
import java.util.List;
import java.util.Map;

import org.apache.lucene.analysis.standard.StandardAnalyzer;
import org.apache.lucene.index.IndexReader;
import org.apache.lucene.queryParser.ParseException;
import org.apache.lucene.queryParser.QueryParser;
import org.apache.lucene.search.Query;
import org.apache.lucene.search.SortField;
import org.apache.lucene.store.Directory;
import org.apache.lucene.store.FSDirectory;
import org.apache.lucene.util.Version;

import com.browseengine.bobo.api.BoboBrowser;
import com.browseengine.bobo.api.BoboIndexReader;
import com.browseengine.bobo.api.Browsable;
import com.browseengine.bobo.api.BrowseException;
import com.browseengine.bobo.api.BrowseFacet;
import com.browseengine.bobo.api.BrowseHit;
import com.browseengine.bobo.api.BrowseRequest;
import com.browseengine.bobo.api.BrowseResult;
import com.browseengine.bobo.api.BrowseSelection;
import com.browseengine.bobo.api.FacetAccessible;
import com.browseengine.bobo.api.FacetSpec;
import com.browseengine.bobo.api.FacetSpec.FacetSortSpec;
import com.browseengine.bobo.facets.FacetHandler;
import com.browseengine.bobo.facets.impl.SimpleFacetHandler;

public class BoboTest {

public BoboTest() {
// TODO Auto-generated constructor stub
}

/**
* @author zliu
* @param args
* @throws IOException
* @throws ParseException
* @throws BrowseException
*/
public static void main(String[] args) throws IOException, ParseException, BrowseException {
// define facet handlers

// color facet handler
SimpleFacetHandler colorHandler = new SimpleFacetHandler("color");

// category facet handler
SimpleFacetHandler categoryHandler = new SimpleFacetHandler("category");

// List<FacetHandler> handlerList = Arrays.asList(new FacetHandler[]{colorHandler,categoryHandler});
List<FacetHandler<?>> handlerList = Arrays.asList(new FacetHandler<?>[] { colorHandler, categoryHandler });

// opening a lucene index
Directory idx = FSDirectory.open(new File("D:\\search\\try\\bobo\\src\\cartag"));
IndexReader reader = IndexReader.open(idx, true);

// decorate it with a bobo index reader
BoboIndexReader boboReader = BoboIndexReader.getInstance(reader, handlerList);

// creating a browse request
BrowseRequest br = new BrowseRequest();
br.setCount(10);
br.setOffset(0);

// add a selection
/*
* BrowseSelection sel=new BrowseSelection("color");
* sel.addValue("red"); br.addSelection(sel);
*/

// parse a query
QueryParser parser = new QueryParser("contents", new StandardAnalyzer(Version.LUCENE_CURRENT));
Query q = parser.parse("cool car");
br.setQuery(q);

// add the facet output specs
FacetSpec colorSpec = new FacetSpec();
colorSpec.setOrderBy(FacetSortSpec.OrderHitsDesc);

FacetSpec categorySpec = new FacetSpec();
categorySpec.setMinHitCount(2);
categorySpec.setMaxCount(100);
categorySpec.setOrderBy(FacetSortSpec.OrderHitsDesc);

br.setFacetSpec("color", colorSpec);
br.setFacetSpec("category", categorySpec);

// SortField colorSort = new SortField("color",true); // sort by color
// in descending order
SortField colorSort = new SortField("color", SortField.STRING, true);

br.setSort(new SortField[] { colorSort });

// perform browse
Browsable browser = new BoboBrowser(boboReader);
BrowseResult result = browser.browse(br);

int totalHits = result.getNumHits();
System.out.println("命中的记录数:" + totalHits);

BrowseHit[] hits = result.getHits();

Map<String, FacetAccessible> facetMap = result.getFacetMap();

FacetAccessible colorFacets = facetMap.get("color");
// System.out.println("colorFacets= " + colorFacets.toString());
List<BrowseFacet> facetVals = colorFacets.getFacets();

System.out.println("按color统计:");
for (BrowseFacet facetVal : facetVals) {
System.out.println("\t\tcolor name=" + facetVal.getValue() + "; count=" + facetVal.getFacetValueHitCount());
}

}

}



依赖的pom文件:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>search.testtry</groupId>
<artifactId>bobo-test</artifactId>
<version>0.1-SNAPSHOT</version>
<dependencies>
<dependency>
<groupId>3rdparty</groupId>
<artifactId>bobo-browse</artifactId>
<version>2.5.0</version> <!-- 2.0.6 -->
<type>jar</type>
</dependency>
<dependency>
<groupId>3rdparty</groupId>
<artifactId>bobo-zoie</artifactId>
<version>2.5.0</version>
<type>jar</type>
</dependency>
<dependency>
<groupId>org.apache.lucene</groupId>
<artifactId>lucene-core</artifactId>
<version>2.9.2</version> <!-- 3.0.0 -->
</dependency>

<dependency>
<groupId>3rdparty</groupId>
<artifactId>fastutil</artifactId>
<version>5.1.5</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.5.8</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.5.8</version>
</dependency>

</dependencies>
<build>
<plugins>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.6</source>
<target>1.6</target>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
</plugins>
</build>
</project>



运行结果:

命中的记录数:8255
按color统计:
color name=black; count=1814
color name=yellow; count=1338
color name=red; count=1316
color name=white; count=1097
color name=silver; count=1021
color name=blue; count=565
color name=green; count=557
color name=gold; count=547
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值