`

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
分享到:
评论

相关推荐

    react-rxjs-elasticsearch-faceted-search-example:最新的 rxjs 和我的React

    使用 React 和 RxJS 为 Elasticsearch 构建分面搜索界面的示例 如果您想查看代码, 从开始 - react 组件在搜索中目录及其名称以大写字母开头,rxjs内容位于的elasticsearch位是和行动,这只是方式来触发来自 UI 的...

    angular-semantic-faceted-search:使用SPARQL的语义多面搜索

    SPARQL切面机可以在找到描述SPARQL Faceter的论文,尽管从1.0.0版开始,实现方式却大不相同。 最重要的是,不是只有一个SPARQL查询来获取所有构面的状态,而是每个构面都进行自己的查询。安装通过Bower安装: bower ...

    open-semantic-desktop-search:使用开放语义搜索进行桌面搜索的虚拟机

    Debian 包 Open Semantic Search Server open-semantic-search_xx.xx.xx.deb in src/packages.chroot 虚拟盒子 Virtual Box 来宾添加 ISO Debian 软件包 vmdebootstrap(安装:“apt-get install vmdebootstrap”...

    faceted-search:具有Hibernate搜索功能的基本搜索引擎

    Faceted-Search 是一个用 Java 编写的小型搜索引擎,用于帮助索引关系内容和创建 准备 用法很简单,首先要做的就是映射持久化实体,基本示例见 。 第二件事是配置数据库连接,这可以通过persistence.xml 或使用预先...

    Solr in Action最新完整版

    Readers will gain a deep understanding of how to implement core Solr capabilities such as faceted navigation through search results, matched snippet highlighting, field collapsing and search results ...

    Scaling Big Data with Hadoop and Solr

    Technologies like Hadoop are trying to address some of the concerns, while Solr provides high-speed faceted search. Bringing these two technologies together is helping organizations resolve the ...

    Solr in Action 英文版完整版

    Readers will gain a deep understanding of how to implement core Solr capabilities such as faceted navigation through search results, matched snippet highlighting, field collapsing and search results ...

    angular-faceted-search:使用 AngularJS 对数据集进行分面搜索的实现

    `angular-faceted-search` 是一个针对 AngularJS 设计的库,用于在 JSON 数据集上实现分面搜索。 **核心概念** 1. **分面(Facets)**: 分面是数据集的属性或类别,可以作为筛选条件。例如,在一个电商网站上,...

    faceted-search:提供分面搜索的 AmpersandJS 工具集

    在给定的标题“faceted-search:提供分面搜索的 AmpersandJS 工具集”中,我们可以推断这是一个专门针对JavaScript开发的库,用于实现分面搜索功能。 AmpersandJS 是一套轻量级的JavaScript工具和库,设计用于构建...

    era-compatibility-check:通过ERA知识图执行路由兼容性检查的React应用程序

    时代兼容性检查 Web应用程序根据数据执行路由兼容性检查。... --build-arg FACETED_BASE_URI=https://linked.ec-dataplatform.eu/describe/ ? url= \ ./ 构建此映像时,需要三个配置参数: ERA_GEO_API :在ER

    淘特搜索引擎共享版-tot-search-engine.zip

    同时,为了满足淘特平台的需求,可能还结合了Solr或Nutch等高级搜索引擎框架,以便实现更复杂的功能,如 faceted search(分面搜索)和相关性排序。 此外,淘特搜索引擎可能还涉及以下关键技术: 1. **分布式处理*...

    Python库 | eea.faceted.inheritance-4.5.zip

    资源分类:Python库 所属语言:Python 资源全名:eea.faceted.inheritance-4.5.zip 资源来源:官方 安装方法:https://lanzao.blog.csdn.net/article/details/101784059

    Python库 | eea.faceted.vocabularies-6.2.zip

    资源分类:Python库 所属语言:Python 资源全名:eea.faceted.vocabularies-6.2.zip 资源来源:官方 安装方法:https://lanzao.blog.csdn.net/article/details/101784059

    search-ui:一组UI组件,用于构建完全自定义的搜索!

    Apisearch-搜索界面 该库是Apisearch项目的一部分。 Apisearch是一个完全基于开源第三方技术的开源搜索引擎。 该项目为她的用户提供了一套渐进式的语言集成库,以及一些第三方项目集成包,插件或javascript小部件。...

    Solr in Action(Manning,2014)

    You'll master topics like text analysis, faceted search, hit highlighting, result grouping, query suggestions, multilingual search, advanced geospatial and data operations, and relevancy tuning.

    lucene-4.3.1资源

    在Lucene 4.3.1中,还引入了一些高级特性和功能,如N-gram分析、Faceted Search(分面搜索)和Spatial Search(空间搜索)。N-gram分析允许短语匹配,而分面搜索则提供了对分类数据的高级浏览和过滤。空间搜索则允许...

    03-Elastic 企业搜索 meetup 成都 8.19 2023

    它提供了强大的搜索功能,包括全文搜索、faceted Search 和聚合搜索等。 Kibana Kibana 是 Elastic Stack 的数据可视化组件,提供了丰富的数据可视化功能,包括图表、仪表板和地图等。它可以帮助用户快速了解数据...

    工会档案盒标签.pdf

    在检索算法方面,工会档案盒标签可以采用full-text search、 faceted search等。 6. 工会档案盒标签的安全性 工会档案盒标签的安全性是非常重要的,旨在保护文件的机密性、完整性和可用性。工会档案盒标签的安全性...

    myeclipse和eclipse的web项目导入

    将 MyEclipse 中创建的 Web 项目导入到 Eclipse 中需要进行一些额外的配置,包括转换项目到 faceted 形式、编辑设置文件和更改目录结构。但是,通过这些步骤,我们可以成功地将项目导入到 Eclipse 中,并在 Tomcat ...

Global site tag (gtag.js) - Google Analytics