--------------------------------------------------------------------------------------

搜索分为两种:

  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的使用配置的更多相关文章

  1. phpcms v9 配置sphinx全文索引教程

    英文介绍:http://www.sphinxsearch.com/docs/manual-0.9.9.html 一.首先需要在服务器上安装sphinx 在Windows上安装sphinx     1. ...

  2. Sphinx全文索引安装教程

    首先了解一下sphinx全文索引的相关知识官方网站:http://www.sphinxsearch.com/ 官方文档:http://www.sphinxsearch.com/docs/ 中文支持:h ...

  3. Sphinx中文分词详细安装配置及API调用实战

    这几天项目中需要重新做一个关于商品的全文搜索功能,于是想到了用Sphinx,因为需要中文分词,所以选择了Sphinx for chinese,当然你也可以选择coreseek,建议这两个中选择一个,暂 ...

  4. Sphinx全文索引 第一节

    1 使用场景:用来解决站内搜索的一些应用场景. 网站中的搜索(站内搜索) 系统后台中的搜索 第一种方式:PHP——>MySQL 第二种方式:MySQL<——>Sphinx:PHP—— ...

  5. sphinx 全文搜索引擎安装与配置

    sphinx 全文搜索引擎 sphinx的安装与配置 ------------------------------------------------------------------------- ...

  6. Sphinx下载、安装、配置、Hello World、文档阅读

    sphinx下载.安装.配置.Hello World.查看文档

  7. sphinx配置文件sphinx.conf参数详细说明

    sphinx配置文件sphinx.conf参数详细说明 sphinx.conf各个参数详细说明 # # Sphinx configuration file sample # # WARNING! Wh ...

  8. coreseek(sphinx)安装2(mysql数据源配置和测试)

    Windows操作系统下 mysql数据源配置: 主要步骤:  配置mysql数据源配置文件->生成索引->开启索引   (三步) coreseek\etc\csft_mysql.conf ...

  9. Sphinx全文索引引擎

    一.什么是sphinx 原理:sphinx将数据库中的表建立索引,php操作sphinx时,将要查询的关键字进行匹配,返回一个id,php通过id到数据库中查询数据. 二.下载 链接:https:// ...

随机推荐

  1. MySQL 之管理脚本

    Mysql中查看每个IP的连接数 ) as ip , count(*) from information_schema.processlist group by ip;

  2. Servlet --简单用户留言系统

    1.创建用户表和留言表 2.编写数据库连接工具类 public class SqlserverDBConn { private Statement stmt; private Connection c ...

  3. Android Activity传递数据使用getIntent()接收不到,揭秘Intent传递数据与Activity启动模式singleTask的关系。

    activity通过intent传递数据的时候,如果activity未启动,那么在这个刚启动的activity里通过getIntent()会获取到这个intent的数据.. 如果要启动的activit ...

  4. TP框架做网页静态化

    首先放上一张某手册中的一段代码: 我们要想在TP框架中执行网页静态化,在这段代码的基础上稍加添加就可以了: 在TP5框架中,为了方便寻找模板文件与生成的静态文件,我们将模板文件以及生成的静态文件放在p ...

  5. 数据库设计和ER模型-------之ER模型的基本概念(第二章)

    ER模型(实体联系模型)的基本元素 实体:是一个数据对象,在ER模型中,实体用方框表示,方框内注明实体的名称 联系:表示一个或多个实体之间的关联关系,联系用菱形框表示,并用线段将其与相关的实体联系起来 ...

  6. js 数组对象的操作方法

    在jquery中处理JSON数组的情况中遍历用到的比较多,但是用添加移除这些好像不是太多. 今天试过json[i].remove(),json.remove(i)之后都不行,看网页的DOM对象中好像J ...

  7. Robot Operating System (ROS)学习笔记3---键盘控制

    搭建环境:XMWare  Ubuntu14.04  ROS(indigo) 转载自古月居  转载连接:http://www.guyuehome.com/253 一.创建控制包 catkin_creat ...

  8. Python开发【模块】:Celery 分布式异步消息任务队列

    Celery 前言: Celery 是一个 基于python开发的分布式异步消息任务队列,通过它可以轻松的实现任务的异步处理, 如果你的业务场景中需要用到异步任务,就可以考虑使用celery, 举几个 ...

  9. 如何使用命令行备份SAP HANA数据库

    SAP HANA是一个在in-memory内存中的数据平台,部署为内部部署应用. 这是一个革命性的平台,它最适合进行实时分析,并开发和部署实时应用程序. 请点击这里了解更多有关SAP HANA. 通过 ...

  10. 58.纯 CSS 创作一只卡通鹦鹉

    原文地址:https://segmentfault.com/a/1190000015339977 优化后效果地址:https://scrimba.com/c/c97Z2vuD 感想:消除了图片外的:h ...