Sphinx 在 windows 上的安装并用JAVA调用
来源:互联网 发布:linux vi 不保存 编辑:程序博客网 时间:2024/06/04 20:51
1. 直接在 http://sphinxsearch.com/downloads/release/ 找 到最新的 windows 版本,我这里下的是 Win64 binaries w/MySQL+PgSQL+libstemmer+id64 support,下载后解压在 D:\sphinx 目录下;
2. 在 D:\sphinx\ 下新建一个 data 目录用来存放索引文件, 一个 log 目录存放日志文件,复制 D:\sphinx\sphinx.conf.in 到 D:\sphinx\bin\sphinx.conf (注意修改文件 名);
3. 修改 D:\sphinx\bin\sphinx.conf ,按网上的博客列举的这里 列出需要修改的几个:
type = mysql # 数据源,我这里是mysql
sql_host = localhost # 数据库服务器
sql_user = root # 数据库用户名
sql_pass = '' # 数据库密码
sql_db = test # 数据库
sql_port = 3306 # 数据库端口
sql_query_pre = SET NAMES utf8 # 去掉此行前面的注释,如果你的数据库是uft8 编码的
index test1
{
# 放索引的目录
path = D:/sphinx/data/
关于charset_type设置的两个配置,这里2.2.9不需要修改,如果是2.06是需要修改的
# 简单分词,只支持0 和1 ,如果要搜索中文,请指定为1
ngram_len = 1
# 需要分词的字符,如果要搜索中文,去掉前面的注释
ngram_chars = U+3000..U+2FA1F
}
# 搜索服务需要修改的部分
searchd
{
# 日志
log = D:/sphinx/log/searchd.log
# PID file, searchd process ID file name
pid_file = D:/sphinx/log/searchd.pid
# windows 下启动searchd 服务一定要注释掉这个
# seamless_rotate = 1
}
4. 建立索引
D:\sphinx\bin>indexer.exe test1 --备注 :test1 为 sphinx.conf 的 index test1
报错
修改其中的配置文件变量为绝对路径d:/sphinx/data,测试通过,又报错:
在主配置中有以下内容:
# main document fetch query
# mandatory, integer document ID field MUST be the first selected column
sql_query= \
SELECT id, group_id, UNIX_TIMESTAMP(date_added) AS date_added, title, content \
FROM documents
说明是默认要查询documents中的表
但我查询的并不是shpihx自己提供的数据,所以做修改:
# main document fetch query
# mandatory, integer document ID field MUST be the first selected column
sql_query= \
SELECT article_id, article_camp_team_id, UNIX_TIMESTAMP(add_time) AS date_added, title, content \
FROM cms_article
重新索引:
有一个警告,再看一下:
# unsigned integer attribute declaration
# multi-value (an arbitrary number of attributes is allowed), optional
# optional bit size can be specified, default is 32
#
# sql_attr_uint= author_id
# sql_attr_uint= forum_id:9 # 9 bits for forum_id
sql_attr_uint= group_id
# UNIX timestamp attribute declaration
# multi-value (an arbitrary number of attributes is allowed), optional
# similar to integer, but can also be used in date functions
#
# sql_attr_timestamp= posted_ts
# sql_attr_timestamp= last_edited_ts
sql_attr_timestamp= date_added
我们已经不再使用 group_id做属性单位了。还有sql_attr_timestamp时间属性。
修改一下:
# unsigned integer attribute declaration
# multi-value (an arbitrary number of attributes is allowed), optional
# optional bit size can be specified, default is 32
#
# sql_attr_uint= author_id
# sql_attr_uint= forum_id:9 # 9 bits for forum_id
#sql_attr_uint= group_id
sql_attr_uint= article_id:11 #11 bits for article_id
# UNIX timestamp attribute declaration
# multi-value (an arbitrary number of attributes is allowed), optional
# similar to integer, but can also be used in date functions
#
# sql_attr_timestamp= posted_ts
# sql_attr_timestamp= last_edited_ts
#sql_attr_timestamp= date_added
sql_attr_timestamp= add_time
重新索引:
还是不对,报修改的属性没找到
Add_time确实是在写SQL时写错别名了,修改后重新索引:
还是报article_id没有找到,我修改为article_camp_team_id后可以正常通过索引:
但一使用 article_id时就异常。
网上查这个字段的作用:
问题一:sql_attr_uint这些设置对生成索引有什么用处?
属性字段,以前用在where,orderby,groupby中的一些字段要在这里定义
问题二:这个配置和查询的时候的where是没有关系的吧?
没有关系。
他们是用来过滤信息的。使用Filter来过滤。
sql_attr_uint这些设置是必要的,否则就是全文索引了。
且对id字段不可做设置。
5、查询引擎启动:直接运行searched.exe就启动了
JAVA接口调用:
String sphinxHost = 127.0.0.1;int sphinxPort = 9312;logger.debug("sphinxHost." + sphinxHost+"sphinxPort"+sphinxPort);//创建客户端SphinxClient sphinxClient = new SphinxClient(sphinxHost,sphinxPort);//设置排序模式,根据排序属性排序,属性指定 为group_id//SPH_SORT_RELEVANCE 模式, 按相关度降序排列(最好的匹配排在最前面) //SPH_SORT_ATTR_DESC 模式, 按属性降序排列 (属性值越大的越是排在前面) //SPH_SORT_ATTR_ASC 模式, 按属性升序排列(属性值越小的越是排在前面) //SPH_SORT_TIME_SEGMENTS 模式, 先按时间段(最近一小时/天/周/月)降序,再按相关度降序 //SPH_SORT_EXTENDED 模式, 按一种类似SQL的方式将列组合起来,升序或降序排列。 //SPH_SORT_EXPR 模式,按某个算术表达式排序。sphinxClient.setSortMode(SphinxClient.SPH_SORT_ATTR_DESC, "group_id");//分页查询的范围sphinxClient.setLimits(sqlStart, sqlCount);//查询SphinxResult sphinxResult = sphinxClient.query(keyword);List<Long> idList = new ArrayList<Long>();//检索后匹配到的内容for ( SphinxMatch m : sphinxResult.getMatches() ) {//得到所到记录Idlogger.debug(" found in sphinx:" + m.getDocId());idList.add(m.getDocId());}
经过测试:最后还是使用2.06版本测试通过(可以在我下载的页面中找到历史版本下载,2.06中有search.ex和searched.exe两个程序)。我之前下的2.2.9(只有searched.exe)无法搜索匹配到相应的表数据(能够索引成功,搜索服务也能启动)
只使用sphinx使用并不能达到很好的效果:
关键字 匹配结果
2015 test 进行搜索,不能成功匹配
2015 匹配
test 匹配
2015 t 没匹配
需要找办法解决和优化。
- Sphinx 在 windows 上的安装并用JAVA调用
- sphinx(coreseek)在linux上的安装
- Sphinx在windows下的安装
- sphinx在windows下的安装
- Sphinx -- windows的安装
- sphinx+scws 全文检索使用之在没安装MySQL的服务器上安装Sphinx
- sphinx在windows下的简单安装与使用
- 在windows下安装sphinx,MySQL support 遇到的问题
- sphinx在windows下的简单安装与使用
- Sphinx在windows下安装使用
- Sphinx在windows下安装使用
- Sphinx 在 windows 下安装使用
- Sphinx 在 windows 下安装使用
- Sphinx 在 windows 下安装使用
- Sphinx 在 windows 下安装使用
- 搜索引擎Sphinx在windows下安装使用
- sphinx在windows下的使用
- Windows环境下Sphinx的安装
- AsyncTask 学习
- 拓扑排序【模板】
- C++中malloc/free与new/delete的区别及内存分配失败错误处理
- vi操作整理
- c#多态的重要实现-接口
- Sphinx 在 windows 上的安装并用JAVA调用
- 一个读text文本文件和解析文本的例子(C语言)
- Bash脚本 Vlc Android平台下载和编译
- 计划以mini2440学习Linux。
- 在myeclipse中如何设置项目编码方式
- 二分查找的探讨
- android刷机包目录结构
- mpi 程序 debug
- nyoj 数论 541最强DE 战斗力