>  기사  >  백엔드 개발  >  coreseek 구성 및 증분 인덱스 병합 인덱스

coreseek 구성 및 증분 인덱스 병합 인덱스

不言
不言원래의
2018-05-15 14:56:012011검색


안내: 저는 PHP 초보자이고, 회사의 업무도 복잡하지 않지만, 최근에 전체 텍스트 검색을 사용하게 되어서 스핑크스를 사용하고 싶습니다.
대략 세 부분으로 나누어집니다. 1: 설치 2: API 호출 3. 여기서는 주로 구성 및 API 호출에 대해 설명합니다. 이전에 설치 단계에 대해 별도의 게시물을 작성했는데 이해가 되지 않으면 공식 웹사이트로 이동하여 더 이상 고민하지 말고 시작해 보세요.
1. 증분 인덱스를 사용하는 이유는 무엇인가요? 사실 저는 개인적으로 데이터량이 적은 기업에서는 증분형 인덱스를 사용하는 것이 전혀 불필요하다고 생각합니다. 정기적으로 인덱스를 재생성할 수 있으면 괜찮습니다. 증분 인덱싱은 마지막 생성된 인덱스 이후 추가된 콘텐츠에 대해 별도의 인덱스를 생성하여 데이터의 양이 상대적으로 적고 업무 처리에 영향을 미치지 않도록 하는 것입니다. 그런 다음 인덱스를 정기적으로 병합하여 데이터 균일성을 유지해야 합니다. 정기적으로 재생성됩니다.
1. 마지막으로 생성된 인덱스의 ID를 기록해야 하며 테이블에 저장할 수 있습니다.

CREATE TABLEtbl_pre_coursevideo( 
idint(11) NOT NULL DEFAULT '0', 
maxidint(11) NOT NULL DEFAULT '0', 
 PRIMARY KEY (id) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

2. 구성 파일

source mysql
{
 type                    = mysql
    sql_host             = 127.0.0.1
    sql_user              = root
    sql_pass              = 123456
    sql_db                = test
    sql_port              = 3306
    sql_query_pre        = SETNAMES utf8
    sql_query_pre       = SETSESSION query_cache_type=OFF #如果这里报错去mysql配置文件修改
    sql_query_pre         = REPLACEINTO tbl_pre_coursevideo SELECT1, MAX(id) FROM tbl_coursevideo    #在刚才新建的表中将当前索引生成的最多id存起来,为增量索引做准备。


    sql_query                = SELECT id,title,create_time, subtitle,content,type FROM tbl_coursevideo WHERE id <=(SELECT maxid FROM tbl_pre_coursevideo WHERE id=1)
   #上面这条sql可以分为两部分WHERE 之前,是对数据的查询(根据自己的业务来定)where之后,是对刚才的记录
   最大ID 的筛选

    sql_attr_uint            = id           #从SQL读取到的值必须为整数
     sql_attr_timestamp        = create_time #从SQL读取到的值必须为整数,作为时间属性


    sql_field_string          = title  #字符串字段(可全文搜索,可返回原始文本信息)  
     sql_field_string          = subtitle  #字符串字段(可全文搜索,可返回原始文本信息)  
     sql_field_string          = content  #字符串字段(可全文搜索,可返回原始文本信息)  
}
source increment : mysql
{
sql_query_pre = SETNAMES utf8
sql_query                = SELECT id,title,create_time, subtitle,content,type FROMtbl_coursevideo WHERE id >(SELECT maxid FROM tbl_pre_coursevideo WHERE id=1)
#这是增量索引的数据源sql。和上面保持一致,唯一的变化,就是where条件之后,这里查询的是大于上次重新生成索引的id,即:刚刚添加的数据
}


#index定义
index mysql
{
   source            = mysql             #对应的source名称
    path            = /usr/local/coreseek/var/data/mysql#请修改为实际使用的绝对路径,例如:/usr/local/coreseek/var/...
    docinfo            = extern
    mlock            = 0morphology        = none
    min_word_len        = 1html_strip                = 0    #中文分词配置,详情请查看:http://www.coreseek.cn/products-install/coreseek_mmseg/
    charset_dictpath = /usr/local/mmseg3/etc/ #BSD、Linux环境下设置,/符号结尾
    #charset_dictpath = etc/                             #Windows环境下设置,/符号结尾,最好给出绝对路径,例如:C:/usr/local/coreseek/etc/...
    charset_type        = zh_cn.utf-8}


index increment : mysql
{
  source=increment

    path            = /usr/local/coreseek/var/data/increment
    charset_dictpath = /usr/local/mmseg3/etc/
    charset_type    = zh_cn.utf-8}
#全局index定义
indexer
{
    mem_limit            = 128M
}


#searchd服务定义
searchd
{
    listen                  =   9312read_timeout        = 5max_children        = 30max_matches            = 1000seamless_rotate        = 0preopen_indexes        = 0unlink_old            = 1    pid_file = /usr/local/coreseek/var/log/searchd_mysql.pid  #请修改为实际使用的绝对路径,例如:/usr/local/coreseek/var/...

    log =/usr/local/coreseek/var/log/searchd_mysql.log       #请修改为实际使用的绝对路径,例如:/usr/local/coreseek/var/...

    query_log =/usr/local/coreseek/var/log/query_mysql.log  #请修改为实际使用的绝对路径,例如:/usr/local/coreseek/var/...


}

사용:
1. 아래 명령은 모두 제가 직접 설치한 환경 경로입니다. 직접 수정하세요)
/usr/local/coreseek/bin/indexer -c /usr/local/coreseek/etc/csft.conf --all #색인생성
이때 tbl_pre_coursevideo 테이블에 레코드가 추가됩니다. 저장되는 것은 콘텐츠 테이블의 최대 id

2,
/usr/local/coreseek/bin/searchd -c /usr/local/coreseek/etc/csft.conf #백그라운드 프로세스 열기

이때 mysql 데이터소스를 검색해보면 실제로는 데이터.
3. 증분 인덱스(콘텐츠 테이블에 새 데이터를 추가하기 위한 전제 조건)
/usr/local/coreseek/bin/indexer -c /usr/local/coreseek/etc/csft.conf   increment --rotate #실행이 완료되면 조각 수인 증분 인덱스 데이터를 여러 개 생성하라는 메시지가 표시됩니다. 방금 콘텐츠 테이블에 추가한 데이터입니다. 이때 실제로 증분 인덱스가 성공했는지 여부를 테스트할 수 있습니다. cl->Query($keyword, 'increment') api 호출 시 방금 추가한 내용을 증분 인덱스를 이용하여 쿼리할 수 있습니다
4. 인덱스 병합

usr/local/coreseek/bin/indexer -c /usr/local/coreseek/etc/csft.conf
–merge mysql increment –rotate

cl->Query(&#39;查询的关键字&#39;, &#39;mysql&#39;); //就能查询出来刚才的新添加的数据,以及以前的数据。

5. 데이터 균일성을 유지하려면 정기적으로 인덱스를 재생성해야 합니다

/usr/local/coreseek/bin/indexer -c /usr/local/coreseek/etc/csft.conf --all --rotate#--rotate 是不影响服务器搜索时可以添加这个属性

1. API를 호출합니다. 설치 후 sphinxapi.php 파일에 이 클래스가 있습니다.

require&#39;sphinxapi.php&#39;;

class Sphinx {private$host=&#39;127.0.0.1&#39;;private$port=9312;private$cl;/*
     * @desc 构造函数  初始化sphinx对象
     */public function __construct() {$this->cl =new SphinxClient ();$this->cl->SetServer($this->host, $this->port);$this->cl->SetConnectTimeout(1);$this->cl->SetArrayResult(true);$this->cl->SetMatchMode(SPH_MATCH_EXTENDED2);$this->cl->SetRankingMode(SPH_RANK_WORDCOUNT);
    }/*
     * @desc 搜索
     * @param $page  页数
     * @param $pagesize  条数
     * @param $keyword  搜索关键字
     * @param $source 索引源
     */public function search($keyword, $p, $pagesize) {$page= ($p-1) *10;$this->cl->SetLimits($page, $pagesize); //分页$res=$this->cl->Query($keyword, $source); //sphinx 查询    }
  }
2. 예약된 작업

yum install crontab //Install
crontab - e //편집을 위해 열기
그런 다음 정기적으로 증분 인덱싱을 실행하고 인덱스를 병합하고 인덱스를 다시 생성합니다.

기억: 병합된 인덱스 페이지가 성공한 경우. 하지만 쿼리된 데이터는 항상 비어 있으므로 구성 파일

 path            = /usr/local/coreseek/var/data/increment#这里的配置,主索引是否和增量索引这只的路径一样,increment 就是索引的文件名,会在data文件夹下。
을 보면 그게 전부입니다. 모르는 부분이 있으면 댓글을 포함하여 이 블로그를 잘 살펴보세요. 이것들은 제가 겪었던 문제 중 일부이며 모두 댓글이 달려 있습니다. 이해가 안 되는 부분이 있으면 메시지를 남겨주시면 제가 다 알려드리겠습니다. 다음번에는 분사 부분에 대해서 말씀드리겠습니다.

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.