`
catastiger
  • 浏览: 138498 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

WINDOWS 下SPHINX安装,以及javaAPI调用(2)

阅读更多

JAVA客户端调用 :

1.生成JAR 包,

在coreseek-3.2.13-win32文件夹内有一个API目录,进入api\java 双击mk.cmd 生成jar包,双击mkdoc.cmd生成DOC文档,在那里还有一个test.java文件,现在我们可以基于这个基础上实现我们的JAVA api调用

先贴上原码:

/*
 * $Id: test.java 2055 2009-11-06 23:09:58Z shodan $
 */

package com.xxxxxx.action;

import java.util.Date;

import org.sphx.api.SphinxClient;
import org.sphx.api.SphinxException;
import org.sphx.api.SphinxMatch;
import org.sphx.api.SphinxResult;
import org.sphx.api.SphinxWordInfo;

/**
 * Test class for sphinx API
 */
public class test
{
	public static void main ( String[] argv ) throws SphinxException
	{
//		if ( argv==null || argv.length<1 )
//		{
//			System.out.print ( "Usage: java -jar sphinxapi.jar [OPTIONS] query words\n\n" );
//			System.out.print ( "Options are:\n" );
//			System.out.print ( "-h, --host <HOST>\tconnect to searchd at host HOST\n" );
//			System.out.print ( "-p, --port\t\tconnect to searchd at port PORT\n" );
//			System.out.print ( "-i, --index <IDX>\tsearch through index(es) specified by IDX\n" );
//			System.out.print ( "-s, --sortby <CLAUSE>\tsort matches by 'CLAUSE' in sort_extended mode\n" );
//			System.out.print ( "-S, --sortexpr <EXPR>\tsort matches by 'EXPR' DESC in sort_expr mode\n" );
//			System.out.print ( "-a, --any\t\tuse 'match any word' matching mode\n" );
//			System.out.print ( "-b, --boolean\t\tuse 'boolean query' matching mode\n" );
//			System.out.print ( "-e, --extended\t\tuse 'extended query' matching mode\n" );
//			System.out.print ( "-ph,--phrase\t\tuse 'exact phrase' matching mode\n" );
////			System.out.print ( "-f, --filter <ATTR>\tfilter by attribute 'ATTR' (default is 'group_id')\n" );
////			System.out.print ( "-v, --value <VAL>\tadd VAL to allowed 'group_id' values list\n" );
//			System.out.print ( "-g, --groupby <EXPR>\tgroup matches by 'EXPR'\n" );
//			System.out.print ( "-gs,--groupsort <EXPR>\tsort groups by 'EXPR'\n" );
////			System.out.print ( "-d, --distinct <ATTR>\tcount distinct values of 'ATTR''\n" );
//			System.out.print ( "-l, --limit <COUNT>\tretrieve COUNT matches (default: 20)\n" );
//			System.out.print ( "-ga, --geoanchor <LATATTR> <LONGATTR> <LAT> <LONG>\n" );
//			System.out.print ( "\t\t\tset anchor for geodistance\n" );
//			System.out.print ( "--select <EXPRS>\tselect the listed expressions only\n" );
//
//			System.exit ( 0 );
//		}

		StringBuffer q = new StringBuffer();
		String host = "192.168.93.147";
		int port = 3312;
		int mode = SphinxClient.SPH_MATCH_EXTENDED;
//		String index = "content";
		String index = "*";
		int offset = 0;
		int limit = 50;
		int sortMode = SphinxClient.SPH_SORT_ATTR_DESC;
		String sortClause = "posttime";
		String groupBy = "";
		String groupSort = "";
		
		SphinxClient cl = new SphinxClient();

		/* parse arguments */
//		if ( argv!=null)
//			for ( int i=0; i<argv.length; i++ )
//		{
//			String arg = argv[i];
//			if ( "-h".equals(arg) || "--host".equals(arg) )				host = argv[++i];
//			else if ( "-p".equals(arg) || "--port".equals(arg) )		port = Integer.parseInt ( argv[++i] );
//			else if ( "-i".equals(arg) || "--index".equals(arg) )		index = argv[++i];
//			else if ( "-s".equals(arg) || "--sortby".equals(arg) )		{ sortMode = SphinxClient.SPH_SORT_EXTENDED; sortClause = argv[++i]; }
//			else if ( "-S".equals(arg) || "--sortexpr".equals(arg) )	{ sortMode = SphinxClient.SPH_SORT_EXPR; sortClause = argv[++i]; }
//			else if ( "-a".equals(arg) || "--any".equals(arg) )			mode = SphinxClient.SPH_MATCH_ANY;
//			else if ( "-b".equals(arg) || "--boolean".equals(arg) )		mode = SphinxClient.SPH_MATCH_BOOLEAN;
//			else if ( "-e".equals(arg) || "--extended".equals(arg) )	mode = SphinxClient.SPH_MATCH_EXTENDED;
//			else if ( "-ph".equals(arg)|| "--phrase".equals(arg) )		mode = SphinxClient.SPH_MATCH_PHRASE;
//			else if ( "-e2".equals(arg) )								mode = SphinxClient.SPH_MATCH_EXTENDED2;
//			else if ( "-g".equals(arg) || "--group".equals(arg) )		groupBy = argv[++i];
//			else if ( "-gs".equals(arg)|| "--groupsort".equals(arg) )	groupSort = argv[++i];
//			else if ( "-o".equals(arg) || "--offset".equals(arg) )		offset = Integer.parseInt(argv[++i]);
//			else if ( "-l".equals(arg) || "--limit".equals(arg) )		limit = Integer.parseInt(argv[++i]);
//			else if ( "-ga".equals(arg)|| "--geoanchor".equals(arg) )	cl.SetGeoAnchor ( argv[++i], argv[++i], Float.parseFloat(argv[++i]), Float.parseFloat(argv[++i]) );
//			else if ( "--select".equals(arg) )							cl.SetSelect ( argv[++i] );
//			else q.append ( argv[i] ).append ( " " );
//		}
		//设置查询关键字
//		q.append("(浦发银行)|(中信证券)|(恒生电子)");
		q.append("恒生电子");
		//设置sphinx 服务端,和端口
		cl.SetServer ( host, port );
		cl.SetWeights ( new int[] { 100, 1 } );
		//设置查询模式
		cl.SetMatchMode ( mode );
		//取20条
		cl.SetLimits ( offset, limit );
		//根据posttime降序排序
		cl.SetSortMode ( sortMode, sortClause );
//		cl.SetFilterRange(arg0, arg1, arg2, arg3)
		if ( groupBy.length()>0 )
			cl.SetGroupBy ( groupBy, SphinxClient.SPH_GROUPBY_ATTR, groupSort );

		SphinxResult res = cl.Query(q.toString(), index);
		if ( res==null )
		{
			System.err.println ( "Error: " + cl.GetLastError() );
			System.exit ( 1 );
		}
		if ( cl.GetLastWarning()!=null && cl.GetLastWarning().length()>0 )
			System.out.println ( "WARNING: " + cl.GetLastWarning() + "\n" );

		/* print me out */
		System.out.println ( "Query '" + q + "' retrieved " + res.total + " of " + res.totalFound + " matches in " + res.time + " sec." );
		System.out.println ( "Query stats:" );
		for ( int i=0; i<res.words.length; i++ )
		{
			SphinxWordInfo wordInfo = res.words[i];
			System.out.println ( "\t'" + wordInfo.word + "' found " + wordInfo.hits + " times in " + wordInfo.docs + " documents" );
		}

		System.out.println ( "\nMatches:" );
		for ( int i=0; i<res.matches.length; i++ )
		{
			SphinxMatch info = res.matches[i];
			System.out.print ( (i+1) + ". id=" + info.docId + ", weight=" + info.weight );

			if ( res.attrNames==null || res.attrTypes==null )
				continue;

			for ( int a=0; a<res.attrNames.length; a++ )
			{
				System.out.print ( ", " + res.attrNames[a] + "=" );

				if ( ( res.attrTypes[a] & SphinxClient.SPH_ATTR_MULTI )!=0 )
				{
					System.out.print ( "(" );
					long[] attrM = (long[]) info.attrValues.get(a);
					if ( attrM!=null )
						for ( int j=0; j<attrM.length; j++ )
					{
						if ( j!=0 )
							System.out.print ( "," );
						System.out.print ( attrM[j] );
					}
					System.out.print ( ")" );

				} else
				{
					switch ( res.attrTypes[a] )
					{
						case SphinxClient.SPH_ATTR_INTEGER:
						case SphinxClient.SPH_ATTR_ORDINAL:
						case SphinxClient.SPH_ATTR_FLOAT:
						case SphinxClient.SPH_ATTR_BIGINT:
							/* longs or floats; print as is */
							System.out.print ( info.attrValues.get(a) );
							break;

						case SphinxClient.SPH_ATTR_TIMESTAMP:
							Long iStamp = (Long) info.attrValues.get(a);
							Date date = new Date ( iStamp.longValue()*1000 );
							System.out.print ( date.toString() );
							break;

						default:
							System.out.print ( "(unknown-attr-type=" + res.attrTypes[a] + ")" );
					}
				}
			}

			System.out.println();
		}
	}
}

/*
 * $Id: test.java 2055 2009-11-06 23:09:58Z shodan $
 */

 
参数不通过命令行传入了,所以注释了很多东西

q.append("(浦发银行)|(中信证券)|(恒生电子)");
q.append("恒生电子");
这个地方得要注意下,你想查浦发银行,中信证券,恒生电子,如果直接写SPHINX会把它当成一个词语,这样就得到很少的结果,如果("(浦发银行)|(中信证券)|(恒生电子)")这样写,这会得到包括“浦发银行” 或“恒生电子” 或“中信证券”的关键词的结果(这个问题我找了快两天,一直以为是自己什么配置错,http://www.coreseek.cn/forum/2_1010_0.html#msg4267

 

cl.SetMatchMode ( mode );
cl.SetSortMode ( sortMode, sortClause );

这两个mode有很多类型,在这不具体介绍了,等下上传个PDF文件,上面有详细介绍

 

 

 

分享到:
评论

相关推荐

    Sphinx-JAVA接口

    这个接口提供了与Sphinx服务器通信的能力,实现了对Sphinx的各种API调用,包括连接、查询、处理结果集等。 **核心组件** 1. **`SphinxClient`**: 这是JAVAAPI的核心类,它负责与Sphinx服务器进行通信。你可以创建...

    语音识别 sphinx4 JAVA 教程

    在Java环境下使用Sphinx-4,首先需要下载并解压Sphinx-4的源代码包,然后通过构建工具如Maven或Gradle进行编译。确保你的开发环境中已安装Java JDK,并配置好环境变量。Sphinx-4的配置文件(通常是config.xml)需要...

    java 整合 sphinx

    在Java中实现增量检索,需要正确配置Sphinx的`delta`索引,并在数据更新时调用相应的API进行增量更新。 4. **简单配置**: 配置Sphinx通常涉及编辑`sphinx.conf`文件,设置数据源、索引、搜索服务等参数。在Java...

    sphinx-api-pool:围绕 Sphinx Java API 的池化包装器

    Sphinx 搜索 Java API 包装器,用于池化 sphinx 搜索连接。 基本用法 连接池由PooledSphinxDataSource类处理。 配置完成后,您可以通过调用getSphinxClient()方法从数据源获取 sphinx 搜索客户端的实例。 请注意,...

    javacv调用本地摄像头

    JavaCV(Java Computer Vision)是一个Java接口,它提供了与多个计算机视觉库的绑定,包括OpenCV、FFmpeg、Pocketsphinx等。这个框架使得在Java应用程序中处理图像和视频变得更加简单。在“javacv调用本地摄像头”的...

    sphinx安装包,不错的东西

    对于开发人员来说,了解如何使用Sphinx API在应用中调用搜索功能也非常重要。例如,你可以使用Python的`SphinxQL`库,或者根据项目选择其他语言的客户端库。在实际应用中,你需要考虑如何有效地设计索引结构,优化...

    sphinx支持discuz包

    后台或插件中调用Sphinx的API,实现搜索功能的接入。 6. **测试和优化**:进行实际搜索测试,根据效果调整索引配置和搜索算法,以达到最佳效果。 **总结** 结合Sphinx的全文检索功能和Discuz! 的社区管理平台,...

    PHP搜索引擎Sphinx使用教程.zip

    2. **PHP与Sphinx的结合**:Sphinx为PHP提供了一个名为`SphinxClient`的API,使得PHP开发者可以直接在代码中调用Sphinx服务,执行搜索、管理索引等操作。这大大简化了在PHP应用中实现全文搜索的过程。 3. **MySQL与...

    sphinx4:纯Java语音识别库

    Sphinx4提供了易于使用的Java API,允许开发者快速集成语音识别功能到Java应用程序中。开发者可以通过调用API设置参数、加载模型、捕获音频并进行识别。 7. **社区支持与资源**: 由于是开源项目,Sphinx4拥有...

    基于java的语音识别库

    为了使用Sphinx4,开发者需要了解如何配置和训练声学及语言模型,以及如何在Java程序中调用其API。此外,Sphinx4还支持自定义词汇表和发音词典,这使得开发者能够针对特定的语境或领域进行优化。 总的来说,Sphinx4...

    sphinx2-0.4

    8. **API支持**:Sphinx提供了多种编程语言的API,如Python、PHP、Java等,方便开发者在应用中集成和调用搜索服务。 9. **性能优化**:Sphinx通过内存管理、索引压缩等手段,有效降低了资源消耗,提升了搜索响应...

    Sphinx:Sphinx 是一个通用的调查或问卷 API,功能强大且可扩展。 它支持多种视图表示和自定义问题类型

    Sphinx 是一个专门为构建调查和问卷而设计的强大且可扩展的API,主要针对Java开发者。在深入探讨Sphinx的功能和应用之前,我们首先需要理解API(应用程序编程接口)的概念。API是一组预先定义的函数、类和协议,允许...

    语音识别pocketsphinx FOR android demo

    1. `src`目录:包含Java源代码,展示了如何在Android应用中调用Pocketsphinx API。 2. `res`目录:存放应用的资源文件,如布局文件、图标等。 3. `libs`目录:包含Pocketsphinx的库文件,如jar包和对应的so库文件,...

    javacv jar 包window64,linux64 javacv-macosx-x86_64.jar

    这个标题提到的是JavaCV的jar包,适用于三种不同的操作系统:Windows 64位、Linux 64位以及Mac OS X 64位。这些jar包使得开发者能够在这些平台上方便地集成计算机视觉功能到他们的Java应用程序中。 1. **JavaCV介绍...

    spinxindex

    2. **Sphinx与Java的集成**:为了在Java项目中使用Sphinx,我们需要一个Java接口,通常是一个JAR文件(如`sphinx.jar`),这个文件提供了Java API来调用Sphinx服务。开发者可以使用这些API创建索引、执行搜索、管理...

    Android平台使用PocketSphinx做离线语音识别,小范围语音99%识别率-IT计算机-毕业设计.zip

    在Android上,我们可以将PocketSphinx作为库导入项目,通过Java或Kotlin接口进行调用。 在Android应用源码中,你将看到以下几个关键部分: 1. **初始化PocketSphinx**:在应用程序启动时,我们需要初始化识别器,...

    sphinx-1.rar

    总结来说,"sphinx-1.rar" 包含的资源可能涵盖了Sphinx的安装、配置、使用示例,以及一个实际的查询脚本,对于学习和部署Sphinx搜索服务具有很大的帮助。如果你需要进一步了解Sphinx的使用,可以解压这个文件并根据...

    java开源包1

    github-java-api 是 Github 网站 API 的 Java 语言版本。 java缓存工具 SimpleCache SimpleCache 是一个简单易用的java缓存工具,用来简化缓存代码的编写,让你摆脱单调乏味的重复工作!1. 完全透明的缓存支持,对...

    java开源包2

    github-java-api 是 Github 网站 API 的 Java 语言版本。 java缓存工具 SimpleCache SimpleCache 是一个简单易用的java缓存工具,用来简化缓存代码的编写,让你摆脱单调乏味的重复工作!1. 完全透明的缓存支持,对...

    javacv jar 包

    - **API调用**:熟悉JavaCV提供的API,了解如何创建摄像头预览、捕获图像、处理图像、识别特征等。例如,使用`OpenCVFrameGrabber`可以从视频源抓取帧,`HighGui.imshow()`可以显示图像。 - **跨平台兼容性**:Java...

Global site tag (gtag.js) - Google Analytics