lnmp+coreseek实现站内全文检索(安装篇)

  • 软件安装包

    安装环境

  • 系统环境
    • centos7.2
    • 1核2G
  • 软件环境
  • 安装mmseg

    • 更新依赖包和安装编译环境
    yum -y install m4 autoconf automake libtool
    yum -y install gcc gcc-c++ wget
    yum -y install mysql-devel

    安装coreseek

    tar -xzvf coreseek-3.2.14.tar.gz
    cd coreseek-3.2.14
    cd mmseg-3.2.14/
    ./bootstrap
    ./configure --prefix=/usr/local/mmseg3
    make
    make install
    
    cd ../csft-3.2.14/
    sh buildconf.sh
    ./configure --prefix=/usr/local/coreseek --without-python --without-unixodbc --with-mmseg --with-mmseg-includes=/usr/local/mmseg3/include/mmseg/ --with-mmseg-libs=/usr/local/mmseg3/lib/ --with-mysql --host=arm
    make
    make install

    <font color=‘red‘>在安装csft的过程中出现了三种错误情况,错误情况如下错误记录,可以参考修改即可</font>

    配置coreseek配置文件

    配置文件主要修改的几个地方如下,具体的修改信息请参见 coreseek配置文件 目录的进行配置

    source src1
    {
    type = mysql                                #数据库类型
    sql_host = localhost                    # MySQL主机IP
    sql_user = root                             # MySQL用户名
    sql_pass = 123                          # 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       #对排序字段进行注释
    sql_query_info      = SELECT * FROM post WHERE id=$id
    }                                           #这行不需要修改
    source srclthrottled:srcl               #继承主数据源
    主数据源索引:
    index text1
    {
    source = src1                           #索引源声明
    charset_type = utf-8                #数据编码(设置成utf8)
    charset_table =                     #上面指定了utf-8,这里需要开启
    }
    增量索引
    index testlstemmed:test1        #先进行注释
    index distl                         #分布式也注释掉
    索引器设置
    indexer
    {
    mem_limit = 256M # 内存大小限制 默认是 32M, 推荐为 256M
    }                                       #其他用默认即可
    sphinx服务进程searchd的相关配置
    searchd {
    }                                       #全部用默认的就可以了

    除了上述的配置项外还需要单独配置几项(如果你是安装的sphinx则进行上述配置即可,如果是coreseek则还需要配置下述内容)

    index test1
    {
    #stopwords                      = G:\data\stopwords.txt
    #wordforms                      = G:\data\wordforms.txt
    #exceptions                         = /data/exceptions.txt
    #charset_type                       = sbcs
    添加下面这两行,意思是把中文分词加入到配置文件中
    charset_type        = zh_cn.utf-8
    charset_dictpath    = /usr/local/mmseg/etc/    #你安装mmseg的目录
    }

    数据库操作

    // 创建数据库
    create database test;
    // 创建数据表
    userinfo | CREATE TABLE `userinfo` (
      `id` int(4) NOT NULL AUTO_INCREMENT,
      `name` varchar(10) NOT NULL,
      `age` int(3) NOT NULL,
      `sex` enum(‘女‘,‘男‘) NOT NULL,
      PRIMARY KEY (`id`)
    ) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8mb4
    // 插入数据
    INSERT INTO `userinfo` VALUES (1,‘张三‘,12,‘女‘),(2,‘李四‘,13,‘男‘),
    (3,‘小明‘,12,‘女‘),(4,‘小红‘,13,‘女‘),(5,‘小四‘,12,‘女‘),(6,‘章泽天‘,13,‘女‘);
    

    创建索引数据(indexer)

    // 第一次创建索引
    /usr/local/coreseek/bin/indexer -c /usr/local/coreseek/etc/csft.conf --all
    // 第二次创建所以(当我们第一次创建索引之后,对数据表做了新的操作再按照上面的方式生成索引是会多增加一个参数)
    /usr/local/coreseek/bin/indexer -c /usr/local/coreseek/etc/csft.conf  -rotate option

    如果上述的操作执行正确,则会提示如下信息

    Coreseek Fulltext 3.2 [ Sphinx 0.9.9-release (r2117)]
    Copyright (c) 2007-2011,
    Beijing Choice Software Technologies Inc (http://www.coreseek.com)
    
     using config file ‘/usr/local/coreseek/etc/csft.conf‘...
    WARNING: no such index ‘-rotate‘, skipping.
    WARNING: no such index ‘option‘, skipping.
    total 0 reads, 0.000 sec, 0.0 kb/call avg, 0.0 msec/call avg
    total 0 writes, 0.000 sec, 0.0 kb/call avg, 0.0 msec/call avg

    测试索引数据(search)

    /usr/local/coreseek/bin/search ‘小‘

    正常情况下会出现下述信息

    Coreseek Fulltext 3.2 [ Sphinx 0.9.9-release (r2117)]
    Copyright (c) 2007-2011,
    Beijing Choice Software Technologies Inc (http://www.coreseek.com)
    
     using config file ‘/usr/local/coreseek/etc/csft.conf‘...
    index ‘test1‘: query ‘小 ‘: returned 3 matches of 3 total in 0.004 sec
    
    displaying matches:
    1. document=3, weight=1
    2. document=4, weight=1
    3. document=5, weight=1
    
    words:
    1. ‘小‘: 3 documents, 3 hits

    启动searchd服务

    该服务是可以在/usr/local/coreseek/etc/csft.conf文件中的searchd配置项中配置,默认服务的端口已经配置,可以不单独做配置

    // 启动服务
    /usr/local/coreseek/bin/searchd -c /usr/local/coreseek/etc/csft.conf
    // 检测服务启动情况
    [[email protected] ~]# netstat -anp | grep 9312
    tcp        0      0 0.0.0.0:9312            0.0.0.0:*               LISTEN      31672/searchd

    创建测试代码

    测试代码可以参见分享文件中的 测试代码 目录

    require ‘./api/sphinxapi.php‘;
    $sphinx = new SphinxClient();
    $sphinx->SetServer(‘127.0.0.1‘, 9312);
    $sphinx->SetArrayResult(true);
    $sphinx->SetMatchMode(SPH_MATCH_ALL);
    $sphinx->SetSortMode(SPH_SORT_RELEVANCE);
    $result = $sphinx->query(‘小‘, ‘*‘);
    var_dump($result);

    查询出的结果如下

    array(10) {
      ["error"]=>
      string(0) ""
      ["warning"]=>
      string(0) ""
      ["status"]=>
      int(0)
      ["fields"]=>
      array(3) {
        [0]=>
        string(4) "name"
        [1]=>
        string(3) "age"
        [2]=>
        string(3) "sex"
      }
      ["attrs"]=>
      array(0) {
      }
      ["matches"]=>
      array(3) {
        [0]=>
        array(3) {
          ["id"]=>
          int(2)
          ["weight"]=>
          string(1) "1"
          ["attrs"]=>
          array(0) {
          }
        }
        [1]=>
        array(3) {
          ["id"]=>
          int(3)
          ["weight"]=>
          string(1) "1"
          ["attrs"]=>
          array(0) {
          }
        }
        [2]=>
        array(3) {
          ["id"]=>
          int(4)
          ["weight"]=>
          string(1) "1"
          ["attrs"]=>
          array(0) {
          }
        }
      }
      ["total"]=>
      string(1) "3"
      ["total_found"]=>
      string(1) "3"
      ["time"]=>
      string(5) "0.003"
      ["words"]=>
      array(1) {
        ["小"]=>
        array(2) {
          ["docs"]=>
          string(1) "3"
          ["hits"]=>
          string(1) "3"
        }
      }
    }

    coreseek错误记录

    安装coerseek问题一

    cd ../csft-3.2.14/????? 
    
    sh buildconf.sh
    
    ./configure --prefix=/usr/local/coreseek --without-python --without-unixodbc --with-mmseg --with-mmseg-includes=/usr/local/mmseg3/include/mmseg/ --with-mmseg-libs=/usr/local/mmseg3/lib/ --with-mysql --host=arm
    
    ?vi src/sphinxexpr.cpp? #然后将所有的T val = ExprEval ( this->m_pArg, tMatch ).....修改为T val =this->ExprEval ( this->m_pArg, tMatch ),共有三处。

    安装coreseek错误二

    make[2]: *** [tokenizer_zhcn.o] Error 1
    make[2]: Leaving directory `/home/zyf/zyfwork/csft3.1b3/src’
    make[1]: *** [all] Error 2
    make[1]: Leaving directory `/home/zyf/zyfwork/csft3.1b3/src’
    make: *** [all-recursive] Error 1
    
    /usr/local/sphinx/src/sphinx.cpp:15557: undefined reference to `libiconv_open’
    libsphinx.a(sphinx.o)(.text+0x53a01):/usr/local/sphinx/src/sphinx.cpp:15575: undefined
    reference to `libiconv’
    libsphinx.a(sphinx.o)(.text+0x53a28):/usr/local/sphinx/src/sphinx.cpp:15581: undefined
    reference to `libiconv_close’
    collect2: ld returned 1 exit status
    make[2]: * [indexer] Error 1
    make[2]: Leaving directory `/usr/local/sphinx/src’
    make[1]: * [all] Error 2
    make[1]: Leaving directory `/usr/local/sphinx/src’
    make: * [all-recursive] Error 1
    
    修改 configure 文件把 #define USE_LIBICONV 0 最后的数值由1改为0

    安装coreseek问题三

    db_interface_mysql.h:32:25: 致命错误:mysql/mysql.h:没有那个文件或目录
    // ubuntu系统解决方案
    sudo apt-get install libmysqlclient-dev
    // centos7解决方案
    sudo yum install mysql-devel

    参考链接

    参考链接一
    参考链接二
    参考链接三

    coreseek额外说明

    安装路径

    /usr/local/coreseek

    配置目录

    /usr/local/coreseek/etc/

    执行程序目录

    /usr/local/coreseek/bin/

    配置文件说明

    进入配置目录,你会找到如下几个文件

    -rw-r--r--. 1 root root   905 10月 13 21:27 example.sql
    -rw-r--r--. 1 root root 18954 10月 13 21:27 sphinx.conf.dist
    -rw-r--r--. 1 root root   956 10月 13 21:27 sphinx-min.conf.dist

    将sphinx.conf.dist文件复制一份名为csft.conf即可.其余文件可以不管.

    执行程序说明

    进入执行程序目录可以看到如下几个文件,具体参考请见sphinx文档

    -rwxr-xr-x. 1 root root 7032560 10月 13 21:27 indexer // 生成索引程序
    -rwxr-xr-x. 1 root root 6650552 10月 13 21:27 indextool // 调试程序
    -rwxr-xr-x. 1 root root 6740544 10月 13 21:27 search  // 搜索程序
    -rwxr-xr-x. 1 root root 7970448 10月 13 21:27 searchd  // 提供客户端查询索引服务
    -rwxr-xr-x. 1 root root 6370256 10月 13 21:27 spelldump // 提取字典内容

    分享文件目录说明

    ├── api.zip // coreseek类文件(该文件和测试代码目录下的api.zip是一样的)
    ├── coreseek-3.2.14.tar.gz // coreseek安装程序文件
    ├── coreseek配置文件
    │?? └── csft.conf // 上述 配置coreseek配置文件 步骤中提交到的配置文件
    ├── 测试代码
    │?? ├── api.zip
    │?? └── index.php // 测试代码
    └── 测试数据库
        └── test.sql // 测试数据库

    原文地址:http://blog.51cto.com/10992108/2304873

    时间: 2024-10-19 11:13:07

    lnmp+coreseek实现站内全文检索(安装篇)的相关文章

    lnmp 安装篇

    转载者语: 转载于:http://www.osyunwei.com/archives/2353.html 原文标题:CentOS 6.2yum安装配置lnmp服务器(Nginx+PHP+MySQL) 本人一CentOS6.8 64位测试成功 准备篇: 1.配置防火墙,开启80端口.3306端口vi /etc/sysconfig/iptables-A INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT(允许80端口通过防火墙)

    借助 Lucene.Net 构建站内搜索引擎(上)

    前言:最近翻开了之前老杨(杨中科)的Lucene.Net站内搜索项目的教学视频,于是作为老杨脑残粉的我又跟着复习了一遍,学习途中做了一些笔记也就成了接下来您看到的这篇博文,仅仅是我的个人笔记,大神请呵呵一笑而过.相信做过站内搜索的.Net程序员应该对Lucene.Net不陌生,没做过的也许会问:就不是个查询嘛!为什么不能使用Like模糊查找呢?原因很简单:模糊查询的契合度太低,匹配关键字之间不能含有其他内容.最重要的是它会造成数据库全表扫描,效率低下,即使使用视图,也会造成数据库服务器"亚历山大

    一步步开发自己的博客 .NET版(5、Lucenne.Net 和 必应站内搜索)

    前言 这次开发的博客主要功能或特点:    第一:可以兼容各终端,特别是手机端.    第二:到时会用到大量html5,炫啊.    第三:导入博客园的精华文章,并做分类.(不要封我)    第四:做个插件,任何网站上的技术文章都可以转发收藏 到本博客. 所以打算写个系类:<一步步搭建自己的博客> 一步步开发自己的博客  .NET版(1.页面布局.blog迁移.数据加载) 一步步开发自己的博客  .NET版(2.评论功能) 一步步开发自己的博客  .NET版(3.注册登录功能) 一步步开发自己

    Lucene.net站内搜索1——SEO优化简介

    声明:在这里,所谈的一切关于SEO的技术主要针对于我们开发人员. SEO (搜索引擎优化) SEO(搜索引擎优化)的目的(很多人都是通过搜索引擎找到我们的网站)是让搜索引擎更多的收录网站的页面,让被收录页面的权重更靠前,让更多的人能够通过搜索引擎进入这个网站 原理:蜘蛛会定时抓取网站的内容,发现网站内容变化.发现新增内容就反映到搜索引擎中 蜘蛛(spider) 爬网站:就是向网站发http get请求的客户端. SEO(搜索引擎优化*):让网站排名靠前,让网站更多的页面被搜索引擎收录.链接(外链

    Sphinx学习之sphinx的安装篇

    一.  Sphinx简介 Sphinx是由俄罗斯人Andrew Aksyonoff开发的一个全文检索引擎.意图为其他应用提供高速.低空间占用.高结果 相关度的全文搜索功能.Sphinx可以非常容易的与SQL数据库和脚本语言集成.当前系统内置MySQL和PostgreSQL 数据库数据源的支持,也支持从标准输入读取特定格式 的XML数据. Sphinx的特性如下: a)  高速的建立索引(在当代CPU上,峰值性能可达到10 MB/秒); b)  高性能的搜索(在2 – 4GB 的文本数据上,平均每

    新站seo如何进行站内优化

    站内优化涉及的因素非常的多,我们就来说说一些比较有用的seo技巧.站内优化一直是一个不太被重视的方面,在百度算法不断改变的今天,站内优化的深度越来越大,只有好的站内优化才能突出网站的竞争力,才能让你在排名的竞争当中笑到最后. 1.关键词一定要多多的准备,从主打关键词开始,长尾词你可以不断的发掘出来,更多的长尾关键词,更多的流量.在关键词的设置时候一定要按标准来做,从标题到描述都要很清楚的表达出来,让每一个网页都要有关键词.让每一个网页都有竞争的机会. 2.内容.对于网站的内容一定要重视起来,好的

    在ssh中利用Solr服务建立的界面化站内搜索

    继上次匆匆搭建起结合solr和nutch的所谓站内搜索引擎之后,虽当时心中兴奋不已,可是看了看百度,再只能看看我的控制台的打印出每个索引项的几行文字,哦,好像差距还是有点大-- 简陋的信息显示环境最起码给了我一个信号,这条路没有走错,好吧,让我们来继续探索搜索引擎的奥秘吧. 上期回顾:上次主要是介绍了solrj,通过solrj的api与solr服务器进行通信,获取服务器上的索引数据以及在编写程序中遇到的一些问题和解决方法.本期主要是建立与solr服务器的通信,提供搜索界面输入关键字或搜索规则,根

    Lucene.Net 站内搜索

    Lucene.Net 站内搜索 一  全文检索: like查询是全表扫描(为性能杀手)Lucene.Net搜索引擎,开源,而sql搜索引擎是收费的Lucene.Net只是一个全文检索开发包(只是帮我们存数据取数据,并没有界面,可以看作一个数据库,只能对文本信息进行检索)Lucene.Net原理:把文本切词保存,然后根据词汇表的页来找到文章 二  分词算法: //一元分词算法(引用Lucene.Net.dll)  一元分词算法 //二元分词算法(CJK:China Japan Korean 需要再

    [转载] 站内消息DB设计思路

    [转载]:点击打开链接  原文标题:两年后,再议“站内信”的实现  注:仅因为在工作中用到相似的东西,故借鉴作者的文章,如有不便请告知,即刻删除 两年前,万仓一黍在博客园发了两篇关于站内信的设计实现博文,<群发“站内信”的实现>.<群发“站内信”的实现(续)>,其中阐述了他关于站内信群发的设计思想,很具有借鉴意义.他在设计时考虑到用户量和存储空间的占用等问题.当然,在他的两篇博文中强调了站内信的设计要考虑具体情况,没有理想的设计方案,他的设计只是对于群发(点到面)的解决方案. 在此