sphinx 文档,sphinx全文索引

  sphinx 文档,sphinx全文索引

  项目只是导入了大量的产品数据,然后发现网站的产品搜索非常卡壳。最初,进行模糊搜索就像是原生sql。数据量20W的时候还可以接受,到了几百万就卡死了,需要优化。

  经过考虑,我们打算采用全文检索sphinx数据库中间件(atlas/mycat)的框架对其进行优化。

  我的环境:

  64位Centos6.5

  Lnmp1.3一键式环境包

  CentOS6.4 X64安装sphinx和sphinx for php扩展

  安装前,请确保已经安装了常用组件,然后从官网下载最新的sphinx。

  yum install -y python python-devel

  http://sphinxsearch.com/downloads/release/

  安装sphinx

  塔尔zxvf sphinx-2.2.10-release.tar.gz

  CD sphinx-2 . 2 . 10-发布。/configure-prefix=/usr/local/sphinx - with-MySQL

  制作制作安装

  如果在制作时有一个未定义的参考libiconv错误,请参考http://www.lvtao.net/database/sphinx-make-error.html的解决方案。

  Libsphinxclient安装(PHP模块需要)

  cd api/libsphinxclient。/configureprefix=/usr/local/sphinx

  制作制作安装

  PHP安装的Sphinx模块

  下载地址:http://pecl.php.net/package/sphinx

  wget http://pecl.php.net/get/sphinx-1.3.0.tgz

  tar zxf sphinx-1.3.3.tgz

  cd sphinx-1.3.3

  /usr/local/php/bin/phpize。/configure-with-PHP-config=/usr/local/PHP/bin/PHP-config-with-sphinx=/usr/local/sphinx/

  制作制作安装

  添加php扩展库

  检查php.ini的位置。

  php - ini

  编辑配置

  vi /usr/local/php/etc/php.ini

  :$跳转到文件的末尾

  extension _ dir=/usr/local/PHP/lib/PHP/extensions/no-debug-non-zts-2013 12 26/

  [斯芬克斯]

  extension=sphinx.so

  Php -m或phpinfo()来查看扩展是否已经加载。

  首先我们要在服务器端设置索引,这样php就可以通过端口访问来获取。

  复制默认配置文件并重新创建一个配置文件。

  CP/usr/local/sphinx/etc/sphinx-min . conf . dist/usr/local/sphinx/etc/sphinx . conf

  Sphinx.conf.dist是完整版的默认配置,内容很多。我选择在这里复制迷你版的sphinx-min.conf.dist,只要满足基本的查询需求即可。

  下面的indexer和searchd是索引创建和查询命令配置,基本上只要设置好你想要的日志路径就可以了。

  重要上部,源(source)和索引(index)

  分析我的需求。我的产品搜索主要包括三个表。

  表产品,(标识,产品标识)

  产品价目表产品价格,

  产品参数表产品属性

  这三者通过product表的product_id一对多相关。

  源src1对应于指数产品

  Src2对应于指数价格

  源src3对应于索引属性

  您可以在源代码中设置自定义返回字段。

  如上

  sql_field_string=产品标识

  sql_field_string=零件号

  配置完成后,创建索引。

  当使用命令/usr/local/sphinx/bin/indexer-c/usr/local/sphinx/etc/sphinx . conf-all-rotate时,如果searchd进程没有监听和更新,将出现no rotate的提示。

  如果不想全部生成,可以使用- all,或者从多个源分别生成。

  /usr/local/sphinx/bin/indexer-c/usr/local/sphinx/etc/sphinx . conf产品

  /usr/local/sphinx/bin/indexer-c/usr/local/sphinx/etc/sphinx . conf价格

  /usr/local/sphinx/bin/indexer-c/usr/local/sphinx/etc/sphinx . conf属性

  如果没有问题,一般都是。

  接下来,searchd将被用作服务器上sphinx的守护进程。

  /usr/local/sphinx/bin/searchd-c/usr/local/sphinx/etc/sphinx.conf(之前测试过途中的test.conf,就用sphinx . conf)

  通常,如果报告了错误

  如果该文件夹不存在,请创建它。

  如果端口进程已经在运行,有两种方法可以停止它。

  1,/usr/local/sphinx/bin/searchd-c/usr/local/sphinx/etc/sphinx . conf-stop

  2.netstat-tnl检查端口9312是否在侦听。

  Lsof -i:9312检查9312的端口信息以获取pid。

  杀死{pid}

  终止进程后,再次执行searchd命令来启动。

  ==========

  Php结束

  //index.php

  phpinfo();死;$s=新的SphinxClient$s- setServer(127.0.0.1 ,9312);$ s-set MATCH mode(SPH _匹配_短语);

  //$ s-set SORT mode(SPH _排序_ATTR_DESC,是_团);//指定模式

  $ s-set SORT mode(SPH _排序_扩展,是_团desc );//扩展模式

  $s- SetFilterString(status , 1 );//这个字段需要在sql_attr_string中显示,否则找不到。如果设置了sql_attr_uint,则为int,后跟类型。

  $ s-setMaxQueryTime(30);

  $res1=$s- query(usb , products );$ res2=$ s-query( 53 e 6 DDE 17 a 667 C4 b 2 af 1d 38 ba 0 a 466 c 4 , prices );$ res3=$ s-query( 53 e 6 DDE 17 a 667 C4 b 2 af 1d 38 ba 0 a 466 c 4 , attrs );//$res=$s- query (switch , products );//$res=$s- query(产品);$ err=$ s-GetLastError();//var _ dump(array _ keys($ RES[ matches ]);//echo br 。只需通过获取的ID读取数据库中的值。br echo pre$products=!空($res1[matches])?$ res1[ matches ]: ;$prices=!空($res2[matches])?$ res2[ matches ]: ;$attrs=!空($res3[matches])?$ res3[ matches ]: ;print _ r($ products);print _ r($价格);print _ r($ attrs);如果(!empty($ err)){ print _ r($ err);} $ s-close();

  Coreseek官网挂了,下载不了,暂时不做中文了。看,下载一本汉语词典,等会有空再打。

  这是打印的查询返回的匹配结果。如果你想查看整个查询结果,你可以查看PHP手册http://php.net/manual/zh/sphinxclient.query.php.

  返回数据结构

  描述键值“matches”存储文档ID及其相应的哈希表“total ”,该哈希表包含文档权重和属性值。此查询在服务器中检索到的匹配文档的总数(即服务器端结果集的大小,并与相关设置相关)‘total _ found’(在服务器上找到并处理)索引中匹配文档‘words’的总数将查询关键字(关键字已被转换为大写和小写、取词干和其他处理)映射到一个小哈希表,该哈希表包含有关关键字的统计信息(出现了多少个文档“docs”——和出现了多少次“hits”——)。“错误”搜索报告的错误信息“警告”搜索报告的警告信息

  默认监控以上配置,端口9312和9306,9312链接php程序,9306是本地数据库的调试端口。如果想在服务器上测试,可以尝试链接。

  mysql -h127.0.0.1 -P9306

  Products是索引名index,match是规则匹配,

  通配符可以在官网手册里。

  http://sphinxsearch.com/docs/current.html#conf-dict搜索通配符

  SQL _ query _ pre=set names UTF8 #在执行SQL之前,它将被执行以确保它不是字符集问题。

  公共函数index(Request $ Request){ $ sphinx=new sphinx search();$ Sphinx-setMatchMode(\ Sphinx \ Sphinx client:SPH _匹配_短语);$ results=$ sphinx-search( % PSM n1 r 1-25 ylc,11* , products )-query();$ error=$ sphinx-get error message();$products=!空($results[matches])?$ results[ matches ]:array();echo preprint _ r($ products);//DD($ results);//DD($ error);} }

  如果searchd进程正在运行,您不仅可以终止它的进程,还可以执行- rotate参数进行无缝更新,而无需重新启动服务。

  /usr/local/sphinx/bin/indexer-c/usr/local/sphinx/etc/sphinx . conf产品-旋转

  ================================================================

  听说Atlas用的人很多,安装测试待续——

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: