[Sphinx]全文索引Sphinx的使用配置
--------------------------------------------------------------------------------------
搜索分为两种:
1. 对结构化数据搜索:SQL语句对数据库中存储的内容进行查询。
2. 对非结构化数据搜索:文本,图片,全文搜索。
全文检索分为两类:
1. 顺序扫描:如SQL中的LIKE查询或regexp正则查询。
2. 索引扫描:将非结构化数据提取部分(如:词组)后进行重组,使其机构化,这些提取出的数据即索引。
使用索引的全文检索包括两个过程:
1. 索引创建(Index):将内容中的词组 与 文本的ID提取出来,创建一张索引表。
2. 搜索索引(Search):将搜索内容拆分成词组,去索引表中匹配ID,查出文本内容。
如何创建索引:
1. 将需要创建索引的文档交给分词组件(Tokenizer);
分词组件所做的事:将文档生成单独的单词,去除标点符号,去除停词(the, a, 的, 是);每种语言的分词组件都有一个停词集合,
经过分词组件后得到的结果成为词元。
2. 将得到的词元(Token)传给语言处理组件(Linguistic Processer);
语言处理组件对得到的词元进行同语言处理:如,英文变为小写(Lowercase),将单词缩减为词根形式,如“cars”到“car”等(stemming),将单词转变为词根形式,如“drove”到“drive”(lemmatization),
3. 将得到的词(Term)传给索引组件(Indexer);
索引组件主要做以下几件事:利用得到的词(Term)和文档ID,创建一个字典,对字典按字母顺序排序,合并相同的词成为文档倒排(Posting List)链表。
如何对索引进行搜索:
1. 输入查询语句,提交给Sphinx。
2. Sphinx对查询语句进行词法分析,语法分析及语言处理。
3. 搜索索引,得到符合语法树的文档。
4. 根据得到的文档和查询语句的相关性,对结果排序。
Sphinx是SQL Parse Index(查询词组索引)缩写,基于SQL的全文检索引擎。Coreseek支持中文的全文检索引擎。
Sphinx的优点:
高速的建立索引(在当代CPU上,可达到10M/秒)
高性能的搜索(在2-4G的文本数据上,平均每次检索响应时间小于0.1秒)
可处理海量数据(目前已知可以处理超过100GB的文本数据,在单一CPU的系统上可处理100M的文档);
提供了优秀的相关度算法,基于短语相似度和统计BM2的复合Ranking方法;
支持分布式搜索;
提供文档片段(摘要以及高亮)生成功能;
可作为MySQL的存储引擎提供搜索服务;
支持布尔、短语、词语相似度等多种检索方式;
文档支持多个全文检索字段(最大不超过32个);
Sphinx的缺点:
必须要有主键
主键必须为整形
不负责数据存储
配置不灵活
Sphinx的使用:
1. 下载Sphinx:
wget http://sphinxsearch.com/files/sphinx-2.2.8-release.tar.gz
编译安装:
cd /public/sphinx-2.2.8
./configure --prefix=/usr/local/sphinx --with-mysql=/usr/local/mysql
(rpm安装的mysql: ./configure --prefix=/usr/local/sphinx --with-mysql=/usr)
make && make install
安装完毕得到四个目录:
bin:存放命令,indexer索引组件,searchd进程
etc:配置文档
var:存放索引表
创建数据库表:
show database; //查看所有数据库
create database test;
create table post(
id int unsigned auto_increment primary key,
title varchar(255) not null default '',
content text default NULL
)engine=myisam default charset=utf8;
desc post; //查看表结构
insert into post(title, content) values("linux", "linux11111");
2. 配置Sphinx:
cd /usr/local/sphinx/etc/
cp sphinx.conf.dist sphinx.conf //备份配置文件,防止改错
vim sphinx.conf
配置文件结构: # 主数据源,(main名字可更改)
source main{
type = mysql #数据库类型
sql_host = localhost #MySQL主机IP
sql_user = test #MySQL用户名
sql_pass = #MySQL密码
sql_db = test #MySQL数据库
sql_port = 3306 #MySQL端口
sql_sock = /tmp/mysql.sock #Linux下需要开启,指定sock文件
sql_query_pre = SET NAMES utf8 #MySQL检索编码
sql_query_pre = SET SESSION query_cache_type=OFF #关闭缓存
sql_query = \ #获取数据的SQL语句
SELECT id, title, content FROM post # 以下是用来过滤或条件查询的属性,这里列出的字段将可以进行条件查询,同时不参与全文检索
#sql_attr_uint = group_id
#sql_attr_timestamp = date_added
} # 增量数据源(inherited source), 继承主数据源
source src1throttled : main{
} # 主索引(local index),(main名字可更改)
index main{
source = main # 指定主数据源
path = /usr/local/sphinx/var/data/main # 索引路径
} # 增量索引(inherited index)
index test1stemmed : test1{
} # 分布式索引(distributed index)
index dist1{
} # 实时索引(realtime index)
index rt{
} # 索引器设置,(调整最小内存到最佳)
indexer{
mem_limit = 256M #内存大小限制,默认128M,推荐256M
#其它用默认即可
} # 服务进程设置,(监听端口号)
searched{
#全部默认即可,默认端口号就是9312
} # 公共配置
common{ }
:set nu //显示行号,:set nonu取消行号
:311,314s/^/#/g //注释增量数据源
:628,632s/^/#/g //注释增量索引
:639,696s/^/#/g //注释分布式索引
3. 创建索引:
创建索引命令:indexer
-c 指定配置文件
--all 对所有索引重新编制索引
--rotate 用于轮换索引,在不停止服务的时候(searchd运行时)增加索引;searchd运行时不加会报错。
--merge 合并索引,增量索引合并到主索引的时候用
生成全部索引: /usr/local/sphinx/bin/indexer -c /usr/local/sphinx/etc/sphinx.conf --all
或指定索引(例如main): /usr/local/sphinx/bin/indexer -c /usr/local/sphinx/etc/sphinx.conf main
(1)如果这里出现报错:
【ERROR: index 'main': sql_connect: Can't connect to local MySQL server through socket '/tmp/mysql.sock'】
没找到/tmp/mysql.sock, 通过find / -name mysql.sock -print查找到位置,在配置sphinx.conf里更改正确。
如:mysql_sock = /var/lib/mysql/mysql.sock 保存退出。
(2)继续创建索引,警告:
【WARNING: Attribute count is 0: switching to none docinfo】
改sphinx.conf里的docinfo = none就没有警告了。(http://sphinxsearch.com/docs/current.html#conf-docinfo)
创建索引出现如下提示,表示生成成功:

上面总共是4条数据.
4. 启动Sphinx:

重建索引:./searchd -c /usr/local/sphinx/etc/sphinx.conf
轮换索引: ./searchd -c /usr/local/sphinx/etc/sphinx.conf goods_list --rotate
./searchd -c /usr/local/sphinx/etc/sphinx.conf store_list --rotate
停止服务:./searchd -c /usr/local/sphinx/etc/sphinx.conf --stop
Link:http://www.cnblogs.com/farwish/p/3961962.html
@黑眼诗人 <farwish.com>
[Sphinx]全文索引Sphinx的使用配置的更多相关文章
- phpcms v9 配置sphinx全文索引教程
英文介绍:http://www.sphinxsearch.com/docs/manual-0.9.9.html 一.首先需要在服务器上安装sphinx 在Windows上安装sphinx 1. ...
- Sphinx全文索引安装教程
首先了解一下sphinx全文索引的相关知识官方网站:http://www.sphinxsearch.com/ 官方文档:http://www.sphinxsearch.com/docs/ 中文支持:h ...
- Sphinx中文分词详细安装配置及API调用实战
这几天项目中需要重新做一个关于商品的全文搜索功能,于是想到了用Sphinx,因为需要中文分词,所以选择了Sphinx for chinese,当然你也可以选择coreseek,建议这两个中选择一个,暂 ...
- Sphinx全文索引 第一节
1 使用场景:用来解决站内搜索的一些应用场景. 网站中的搜索(站内搜索) 系统后台中的搜索 第一种方式:PHP——>MySQL 第二种方式:MySQL<——>Sphinx:PHP—— ...
- sphinx 全文搜索引擎安装与配置
sphinx 全文搜索引擎 sphinx的安装与配置 ------------------------------------------------------------------------- ...
- Sphinx下载、安装、配置、Hello World、文档阅读
sphinx下载.安装.配置.Hello World.查看文档
- sphinx配置文件sphinx.conf参数详细说明
sphinx配置文件sphinx.conf参数详细说明 sphinx.conf各个参数详细说明 # # Sphinx configuration file sample # # WARNING! Wh ...
- coreseek(sphinx)安装2(mysql数据源配置和测试)
Windows操作系统下 mysql数据源配置: 主要步骤: 配置mysql数据源配置文件->生成索引->开启索引 (三步) coreseek\etc\csft_mysql.conf ...
- Sphinx全文索引引擎
一.什么是sphinx 原理:sphinx将数据库中的表建立索引,php操作sphinx时,将要查询的关键字进行匹配,返回一个id,php通过id到数据库中查询数据. 二.下载 链接:https:// ...
随机推荐
- 如何使用Python操纵Postgres数据库
pip install psycopg2 psycopg2-binary #!/usr/bin/python import psycopg2conn = psycopg2.connect(databa ...
- HDFS高级功能
HDFS的六大高级特性: 安全模式 安全模式是HDFS所处的一种特殊状态,在这种状态下,文件系统只接受读数据请求,而不接受删除.修改等变更请求.在NameNode主节点启动时,HDFS首先进入安全模式 ...
- TextView右上角显示小红点,小红点根据TextView的长度移动,小红点被TextView挤出去不显示的问题;
大概就是图片这个样,这个功能很常见,本来我以为很简单,谁知道真的很简单: 遇到点小问题,记录一下,哈哈: 小红点的Drawable: <?xml version="1.0" ...
- python函数的return
return语句用于退出函数,向调用方返回一个表达式.return在不带参数的情况下(或者没有写return语句),默认返回None.None是一个特殊的值,它的数据类型是NoneType.NoneT ...
- Cmder - 在右键菜单添加"Cmder Here"
使用命令行或终端工具的时候都有一个让我们觉得麻烦的问题,就是需要cd很多目录达到目标位置.在可视化操作系统下面我们一般都是已经处在目标目录了,这时需要执行某些命令如: python test.py 现 ...
- Oracle bacic
1.连接Oracle 2.操作数据库 3.单表查询 4.SUID 5.常用函数 6.集合运算 7.Oracle 对象 8.PL/SQL 9.存储函数 10.存储过程 11.触发器 1.连接到数据库 O ...
- win7 CMD登录本机MySQL数据库管理
- PyQt5 qt desinger
https://jaist.dl.sourceforge.net/project/eric-ide/eric6/stable/18.08/eric6-18.08.zip pip --timeout 3 ...
- 高级php面试题转载
在网上看到一些高级php 的面试题目.. 最近接连面试了几家公司,有些重要问题记录一下,督促自己学习提高,同时希望给朋友们一些帮助.内容很多,一点点完善,一步步学习..有些是面试被问,有些是招聘要求, ...
- Python学习笔记_week3_函数
一.介绍 1.面向对象(华山派)--->类(独门秘籍)--->class(定义的关键字) 2.面向过程(少林派)--->过程--->def 3.函数式编程(逍遥派)---> ...