`

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

0
3
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics