文档章节

Sphinx 全文检索引擎的搭建以及python调用例子

FenG_Vnc
 FenG_Vnc
发布于 2017/02/14 19:22
字数 1365
阅读 930
收藏 2

【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>>

提要:本来之前一直都是使用whoosh作为全文搜索,后面在使用的过程愈发的发现这个东西的搜索并不特别的完美。并且生成的索引量又十分巨大。所以考虑换一个,最后选了sphinx来作为新的搜索。而且网上的安装例子都并不是很全。因此做下记录。

介绍

Sphinx是一个基于SQL的全文检索引擎,可以结合MySQL,PostgreSQL做全文搜索,它可以提供比数据库本身更专业的搜索功能,使得应用程序更容易实现专业化的全文检索。Sphinx特别为一些脚本语言设计搜索API接口,如PHP,Python,Perl,Ruby等,同时为MySQL也设计了一个存储引擎插件

Sphinx 单一索引最大可包含1亿条记录,在1千万条记录情况下的查询速度为0.x秒(毫秒级)。Sphinx创建索引的速度为:创建100万条记录的索引只需 3~4分钟,创建1000万条记录的索引可以在50分钟内完成,而只包含最新10万条记录的增量索引,重建一次只需几十秒

Sphinx的主要特性包括:

高速索引 (在新款CPU上,近10 MB/秒); 高速搜索 (2-4G的文本量中平均查询速度不到0.1秒); 高可用性 (单CPU上最大可支持100 GB的文本,100M文档); 提供良好的相关性排名 支持分布式搜索; 提供文档摘要生成; 提供从MySQL内部的插件式存储引擎上搜索 支持布尔,短语, 和近义词查询; 支持每个文档多个全文检索域(默认最大32个); 支持每个文档多属性; 支持断词; 支持单字节编码与UTF-8编码

  • 1、安装包的准备


    sphinx:https://github.com/eric1688/sphinx (我采用的是sphin-for-chinases支持中文搜索)

    xdict :http://pan.baidu.com/s/1czkGO2 密码:kouv (下载这个分词工具可能需要梯子,因此我直接常上传百度云)

    shpinxapi: https://github.com/feeen/sphinxapi/blob/master/sphinxapi/init.py (这个是python调用shpinx的API。直接拿过来导入就可以使用)

  • 2、安装sphinx

    • 首先安装mysql

       apt-get -y install mysql-server libmysqlclient-dev
       updatedb
      
  • 安装sphinx

      git clone https://github.com/eric1688/sphinx 
      cd sphinx 
     ./configure --prefix=/usr/local/sphinx
      make -j2 && make install 
    
  • 3、配置中文支持 tar xf xdict_1.1.tar.gz /usr/local/sphinx/bin/mkdict xdict_1.1.txt xdict mv xdict /usr/local/sphinx/etc/

  • 4、修改配置文件 cp sphinx.conf.dist sphinx.conf vim sphinx.conf source posts { type = mysql sql_host = 127.0.0.1 sql_user = test sql_pass = test sql_db = test sql_port = 3306 # optional, default is 3306 sql_sock = /var/run/mysqld/mysqld.sock sql_query = SELECT id, post_title FROM test sql_query_pre = SET NAMES utf8 # sql_attr_uint = id sql_field_string = post_title sql_ranged_throttle = 0 } index test1 { source = posts # 索引文件的存放位置
    path = /usr/local/sphinx/var/data/posts 文件存储模式(默认为extern)
    docinfo = extern
    #缓存数据内存锁定
    mlock = 0
    # 马氏形态学(对中文无效)
    morphology = none
    # 索引词最小长度
    min_word_len = 1
    # 数据编码(设置成utf8才能索引中文,最新版本的sphinx不支持这个参数)
    # charset_type = utf-8
    # 中文分词词典
    chinese_dictionary = /usr/local/sphinx/etc/xdict
    # 最小索引前缀长度
    min_prefix_len = 0
    # 最小索引中缀长度
    min_infix_len = 1
    # 对于非字母型数据的长度切割 ngram_len = 1 # 对否对去除用户输入查询内容

      html_strip = 0 
    
      }
      # 索引器设置   
      indexer   
          {   
      # 内存大小限制 默认是 32M, 最大 2047M, 推荐为 256M 到 1024M之间   
      mem_limit = 256M   
      }
      # sphinx服务进程search的相关配置   
      searchd   
      {   
      # 监测端口及形式,一下几种均可,默认为本机9312端口   
      # listen = 127.0.0.1   
      # listen = 192.168.0.1:9312   
      # listen = 9312   
      # listen = /var/run/searchd.sock 
    
      # search进程的日志路径
      log = /usr/local/sphinx/var/log/searchd.log   
      # 查询日志地址   
      query_log = /usr/local/sphinx/var/log/query.log   
      # 读取超时时间   
      read_timeout = 5   
      # 请求超时市时间   
      client_timeout = 300   
      # searche进程的最大运行数   
      max_children = 30   
      # 进程ID文件   
      pid_file = /usr/local/sphinx/var/log/searchd.pid   
      # 最大的查询结果返回数 (这个参数新版本不支持)   
      #max_matches = 1000   
      # 是否支持无缝切换(做增量索引时需要)   
      seamless_rotate = 1   
      # 在启动运行时是否提前加载所有索引文件   
      preopen_indexes = 0   
      # 是否释放旧的索引文件   
      unlink_old = 1   
      # MVA跟新池大小(默认为1M)   
      mva_updates_pool = 1M   
      # 最大允许的网络包大小(默认8M)   
      max_packet_size = 8M   
     # 每个查询最大允许的过滤器数量(默认256)   
     max_filters = 256   
     #每个过滤器最大允许的值的个数(默认4096)   
      max_filter_values = 4096   
      # 每个组的最大查询数(默认为32)   
      max_batch_queries = 32   
      }   
      # Sphinx配置文件结束 
    
  • 5、增加索引 /usr/local/sphinx/bin/indexer -c /usr/local/sphinx/etc/sphinx.conf test1 如果有多个索引就使用参数--all /usr/local/sphinx/bin/indexer -c /usr/local/sphinx/etc/sphinx.conf --all

  • 6、开启守护进程 /usr/local/sphinx/bin/searchd -c /usr/local/sphinx/etc/sphinx.conf 如果重建索引时守护进程正在运行,需要运行下面的指令 会重建索引并且重开守护进程 /usr/local/sphinx/bin/indexer -c /usr/local/sphinx/etc/sphinx.conf --all --rotate

##这样一来就基本配置完成了,然后下面这个简单的demo就是用python来调用sphinx达到查询 import sphinxapi spc = sphinxapi.SphinxClient() spc.SetServer(str('127.0.0.1'),9312) spc.SetMatchMode(sphinxapi.SPH_MATCH_ANY) spc.SetLimits(0,5) res = spc.Query('星巴克') print res

总结:sphinx的查询功能确实很强大,速度也挺快。并且索引的空间并不会非常大。后续的话会继续研究这个东西。

© 著作权归作者所有

FenG_Vnc
粉丝 11
博文 24
码字总数 11100
作品 0
深圳
其他
私信 提问
Sphinx 2.0.3 发布,全文搜索引擎

全文搜索引擎 Sphinx 发布了最新的 2.0.3 版本,可从这里下载。 这是自 0.9.9 版本以来的第一个稳定发行版本,包括稳定的经过大量测试的实时索引技术,64位的 MVA 支持,基于表达式的ranker、...

红薯
2011/12/29
2.3K
6
Sphinx 2.0.2-beta 发布,全文检索引擎

Sphinx是一个基于SQL的全文检索引擎,可以结合MySQL,PostgreSQL做全文搜索,它可以提供比数据库本身更专业的搜索功能,使得应用程序更容易实现专业化的全文检索。Sphinx特别为一些脚本语言设...

红薯
2011/11/17
1K
1
Sphinx 2.0.4 发布,基于SQL的全文检索引擎

Sphinx 2.0.4 发布了,该版本主要是 bug 修复,建议使用实时索引的用户尽快升级。详细修复的 bug 列表请看这里。 Sphinx是一个基于SQL的全文检索引擎,可以结合MySQL,PostgreSQL做全文搜索,...

红薯
2012/03/19
2.6K
0
Sphinx 1.10-beta 发布,全文检索引擎

Sphinx是一个基于SQL的全文检索引擎,可以结合 MySQL,PostgreSQL做全文搜索,它可以提供比数据库本身更专业的搜索功能,使得应用程序更容易实现专业化的全文检索。Sphinx特别为一些脚本语言设...

红薯
2010/07/20
885
0
全文检索引擎 Sphinx 0.9.9 发布

Sphinx是一个基于SQL的全文检索引擎,可以结合MySQL,PostgreSQL做全文搜索,它可以提供比数据库本身更专业的搜索功能,使得应用程序更容易实现专业化的全文检索。Sphinx特别为一些脚本语言设...

红薯
2009/12/03
932
2

没有更多内容

加载失败,请刷新页面

加载更多

dynamic-connectivity 动态连通性问题之 quick-union 算法

quick-union 的思想是:若对象 p 的 root_id 和对象 q 的 root_id 相等,则认为 p 和 q 连通。 若要将对象 p 和对象 q 连通(已知两对象未连通),则将 p 的 root_id 的值设为 q 的 root_id ...

Phpythoner_Alei
今天
33
0
OSChina 周六乱弹 —— 实在选不出来就唱国歌

Osc乱弹歌单(2020)请戳(这里) 【今日歌曲】 @花间小酌 :#今日歌曲推荐# 分享阿冗的单曲《你的答案》。--祝大家在2020年都找到自己答案。 《你的答案》- 阿冗 手机党少年们想听歌,请使劲...

小小编辑
今天
12
1
Maven打包可执行Jar包的方法

在使用Java开发中,会使用到将工程打包成可执行的jar包的情况,那么在maven中怎么将项目中的依赖包都添加到jar中呢。在pom.xml中添加一下插件: <build><plugins><plugin><ar...

CapJes
今天
10
0
使用vue 开发地图类系统(openlayers.js)的注意。

使用vue 开发地图类系统的注意。 1、使用地图应该创建的对象 少使用 vue 的data 和计算属性(comments)存数据或是vuex。 为什么要要注意这个问题呢? 答:这个就要了解到vue的实现原理 。原理...

DY-Tao
昨天
7
0
web移动端学习:高德地图demo(一)

在高德地图开发中申请开发者资格,然后在控制台中新建应用,获得KEY; 新建模板HTML文件; <!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><title>地图demo</title><scri......

dxiya
昨天
8
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部