Sphinx学习笔记(一)
最近负责一个项目,需要用到全文检索,我的环境大体如下:
## Minimal Sphinx configuration sample (clean, simple, functional)##数据源,src1为名字,后面会引用这个名字source src1{type = mysqlsql_host = localhostsql_user = testsql_pass =sql_db = testsql_port = 3306 # optional, default is 3306sql_query = \SELECT id, group_id, UNIX_TIMESTAMP(date_added) AS date_added, title, content \FROM documentssql_attr_uint = group_idsql_attr_timestamp = date_added}#test1为索引名称,sphinx检索时需要这个名字,相当于关系数据库中的tableindex test1{source = src1 #引用的数据源名称path = @CONFDIR@/data/test1}index testrt{type = rtrt_mem_limit = 128Mpath = @CONFDIR@/data/testrtrt_field = titlert_field = contentrt_attr_uint = gid}indexer{mem_limit = 128M}searchd{listen = 9312listen = 9306:mysql41log = @CONFDIR@/log/searchd.logquery_log = @CONFDIR@/log/query.logread_timeout = 5max_children = 30pid_file = @CONFDIR@/log/searchd.pidseamless_rotate = 1preopen_indexes = 1unlink_old = 1workers = threads # for RT to workbinlog_path = @CONFDIR@/data}
D:\blue\sphinx-2.2.8-release-win64-full\bin>indexer -c ..\sphinx-min.conf.in --allSphinx 2.2.8-id64-release (r4942)Copyright (c) 2001-2015, Andrew AksyonoffCopyright (c) 2008-2015, Sphinx Technologies Inc (http://sphinxsearch.com)using config file '..\sphinx-min.conf.in'...indexing index 'test1'...collected 4 docs, 0.0 MBsorted 0.0 Mhits, 100.0% donetotal 4 docs, 33882 bytestotal 0.121 sec, 278900 bytes/sec, 32.92 docs/secskipping non-plain index 'testrt'...total 3 reads, 0.000 sec, 12.0 kb/call avg, 0.0 msec/call avgtotal 12 writes, 0.001 sec, 5.7 kb/call avg, 0.1 msec/call avg需要注意的是,如果需要建立的索引已经被使用,即已经启动了searchd服务,就需要增加--rotate参数,类似于indexer -c ..\sphinx-min.conf.in --all --rotate
然后在同一目录下运行 searchd -c ..\sphinx-min.conf.in,如下
D:\blue\sphinx-2.2.8-release-win64-full\bin>searchd -c ..\sphinx-min.conf.inSphinx 2.2.8-id64-release (r4942)Copyright (c) 2001-2015, Andrew AksyonoffCopyright (c) 2008-2015, Sphinx Technologies Inc (http://sphinxsearch.com)using config file '..\sphinx-min.conf.in'...listening on all interfaces, port=9312listening on all interfaces, port=9306precaching index 'test1'rotating index 'test1': successprecaching index 'testrt'precached 2 indexes in 0.045 sec
没有什么错误,需要注意的是,需要先创建索引,才能启动服务,否则可能会出错,searchd命令也可以安装为服务,以后使用起来会更加方便,这里这么做也是为了看到底是否配置成功,否则系统服务出错,我们看不到错误原因。
Sphinx 2.2.8-id64-release (r4942)
Copyright (c) 2001-2015, Andrew Aksyonoff
Copyright (c) 2008-2015, Sphinx Technologies Inc (http://sphinxsearch.com)
using config file '..\sphinx-min.conf.in'...
indexing index 'test1'...
collected 4 docs, 0.0 MB
sorted 0.0 Mhits, 100.0% done
total 4 docs, 303 bytes
total 0.086 sec, 3518 bytes/sec, 46.44 docs/sec
skipping non-plain index 'testrt'...
total 3 reads, 0.000 sec, 0.4 kb/call avg, 0.0 msec/call avg
total 12 writes, 0.001 sec, 0.2 kb/call avg, 0.0 msec/call avg
rotating indices: successfully sent SIGHUP to searchd (pid=4556).
"id" "group_id" "date_added""3" "2" "1427446411""4" "2" "1427446411"
这里面有一个问题,可以看出id 4实际上并没有“重构”这个词,只是包含“重”“构”这两个字而已,所以可能无法满足某些需求,但是好在Sphinx的默认匹配方式是短语相似度,所以理论上来说,包含“重构”这个词的会排序在前面,简单测试也是如此,是否一直如此就不知道了。可以参考这篇文章:http://rainkid.blog.163.com/blog/static/165140840201010277223611/
var SphinxClient = require ("sphinxapi"),util = require('util'),assert = require('assert');var cl = new SphinxClient();cl.SetServer('localhost', 9312);cl.Query('重构','test1', function(err, result) {assert.ifError(err);console.log(util.inspect(result, false, null, true));});运行程序,node sphinx2.js,如下{ error: '',warning: '',status: [ 0 ],fields: [ 'title', 'content' ],attrs:[ [ 'group_id', 1 ],[ 'date_added', 2 ] ],matches:[ { id: 3,weight: 2,attrs: { group_id: 2, date_added: 1427446411 } },{ id: 4,weight: 1,attrs: { group_id: 2, date_added: 1427446411 } } ],total: 2,total_found: 2,time: 0.004,words:[ { word: '重', docs: 2, hits: 2 },{ word: '构', docs: 2, hits: 2 } ] }可以看出和SphinxQL运行的效果一样,只不过返回的信息更多而已。
2)SphinxQL
#sphinx.js
var mysql = require('mysql');var connection = mysql.createConnection({host : 'localhost',port : '9306'});connection.connect();var queryString = "SELECT * FROM test1 WHERE MATCH('重构')";connection.query(queryString, function(err, rows, fields) {if (err) throw err;for (var i in rows) {console.log(JSON.stringify(rows[i]));}});connection.end();运行程序,node sphinx.js,如下{"id":3,"group_id":2,"date_added":1427446411}{"id":4,"group_id":2,"date_added":1427446411}乍看起来,似乎sphinxapi提供的信息更多,我没有具体比较过,不过sphinxQL也包含了一些函数,如weight(),可以返回权重,如执行SELECT *, weight() FROM test1 WHERE MATCH('重构'); 结果如下"id" "group_id" "date_added" "weight()""3" "2" "1427446411" "2557""4" "2" "1427446411" "1557"可知sphinxap提供的权重,似乎是sphinxQL提供的值除以1000之后的值
3、CentOS的安装和使用
$ yum install postgresql-libs unixODBC
$ rpm -Uhv sphinx-2.2.8.rhel6.x86_64.rpm
$ service searchd start
具体的使用和Windows是一样的,没有什么区别。
4、其他
indexer --merge DSTINDEX SRCINDEX [--rotate]
indexer --merge main delta --merge-dst-range deleted 0 0
2013.11.09 sphinx-for-chinese-2.2.1-dev-r4311-win32.zip2013.11.09 sphinx-for-chinese-2.2.1-dev-r4311.tar.gz
index test1{source = src1path = D:/blue/sphinx_data/data/test1docinfo = externcharset_type = utf-8chinese_dictionary = D:\blue\sphinx-for-chinese-2.2.1-dev-r4311-win32\xdict}其中charset_type = utf-8在最新的版本中已经废弃,因为默认已经是utf-8,xdict是一个字典文件
Sphinx学习笔记(一)的更多相关文章
- Sphinx学习笔记2
因为网站搜索的需要,启动了一个搜索引擎项目,其实也算不上完整的搜索引擎,需求很简单,如下: 1)搜索产品名.类别名.品牌名.副标题.关键字等字段 2)数据量目前为13000左右,未来可 ...
- SQL反模式学习笔记17 全文搜索
目标:全文搜索 使用SQL搜索关键字,同时保证快速和精确,依旧是相当地困难. SQL的一个基本原理(以及SQL所继承的关系原理)就是一列中的单个数据是原子性的. 反模式:模式匹配 使用Like 或者正 ...
- Linux学习笔记-Linux系统简介
Linux学习笔记-Linux系统简介 UNIX与Linux发展史 UNIX是父亲,Linux是儿子. UNIX发行版本 操作系统 公司 硬件平台 AIX IBM PowerPC HP-UX HP P ...
- python学习笔记:建立一个自己的搜索引擎
写学习笔记是我学习python以来养成的一个习惯,每学习一个知识点,便整理成文字记录下来.搜索引擎大家经常都有在使用,国内外也很很多搜索引擎平台. Google搜索引擎建立至今已经快20年了,之后全球 ...
- 《SQL 反模式》 学习笔记
第一章 引言 GoF 所著的的<设计模式>,在软件领域引入了"设计模式"(design pattern)的概念. 而后,Andrew Koenig 在 1995 年造了 ...
- js学习笔记:webpack基础入门(一)
之前听说过webpack,今天想正式的接触一下,先跟着webpack的官方用户指南走: 在这里有: 如何安装webpack 如何使用webpack 如何使用loader 如何使用webpack的开发者 ...
- PHP-自定义模板-学习笔记
1. 开始 这几天,看了李炎恢老师的<PHP第二季度视频>中的“章节7:创建TPL自定义模板”,做一个学习笔记,通过绘制架构图.UML类图和思维导图,来对加深理解. 2. 整体架构图 ...
- PHP-会员登录与注册例子解析-学习笔记
1.开始 最近开始学习李炎恢老师的<PHP第二季度视频>中的“章节5:使用OOP注册会员”,做一个学习笔记,通过绘制基本页面流程和UML类图,来对加深理解. 2.基本页面流程 3.通过UM ...
- 2014年暑假c#学习笔记目录
2014年暑假c#学习笔记 一.C#编程基础 1. c#编程基础之枚举 2. c#编程基础之函数可变参数 3. c#编程基础之字符串基础 4. c#编程基础之字符串函数 5.c#编程基础之ref.ou ...
随机推荐
- 【python】python的正则表达式 re
ps:本文摘自互联网,觉得结构很好,讲的也很清晰.记下,备查. 延伸阅读:python的 内建函数 和 subprocess .此文是本系列的第三篇文章了,和之前一样,内容出自官方文档,但是会有自己的 ...
- Winwos Server 2012发布ASP.NET MVC5 项目
一.本文实验环境: Windows Server 2012 R2 Visual Studio 2015 项目为:ASP.NET MVC 5.0,使用的是SQL SERVER 2008 R2数据库 二. ...
- Struts2-046验证脚本
下面分享一下Struts2-046验证的python脚本 #encoding:utf-8 import urllib2 from poster.encode import multipart_enco ...
- 为什么我的子线程更新了 UI 没报错?借此,纠正一些Android 程序员的一个知识误区
开门见山: 这个误区是:子线程不能更新 UI ,其应该分类讨论,而不是绝对的. 半小时前,我的 XRecyclerView 群里面,一位群友私聊我,问题是: 为什么我的子线程更新了 UI 没报错? 我 ...
- input取值区间实例
前端开发中经常会遇到 input 取值区间的需求,比如搜索的时候,价格区间,积分值区间 大致的需求为 input 的值必须是正整数,第二个 input 的值必须大于第一个 DOM结构如下: <d ...
- Nova控制节点集群
#Nova控制节点集群 openstack pike 部署 目录汇总 http://www.cnblogs.com/elvi/p/7613861.html ##Nova控制节点集群 # control ...
- mysql 系统性浅聊 myisam 存储引擎【原创】
>>思维导图 >>介绍 mysql中的存储引擎都是以插件的形式存在,目前用的最多存储引擎就是innodb和myisam.MySQL5.5.5以后(包括5.5.5)默认使用Inn ...
- CCF-201604-1-折点计数
问题描述 试题编号: 201604-1 试题名称: 折点计数 时间限制: 1.0s 内存限制: 256.0MB 问题描述: 问题描述 给定n个整数表示一个商店连续n天的销售量.如果某天之前销售量在增长 ...
- 用echartsjs 实现动态绘制折线、柱状等图形,并实现多图联动效果
echarts对于大数据处理后绘制折线图,柱形图等等的效果和速度都很好.下面我们介绍 怎么把封装的数据列表解析出来,动态绘图,并且实现鼠标联动效果引入js文件: <script type=&qu ...
- git学习资料包
1.廖雪峰老师的git教程:https://www.liaoxuefeng.com -----点击“GIT教程”开始学习 2.菜鸟教程git学习:http://www.runoob.com/gi ...