sphinx主索引,增量索引建立

2021-08-04 07:43:50 字數 3246 閱讀 4504

相關命令及步驟

建立主索引:

/usr/local/coreseek/bin/indexer -c /usr/local/coreseek/etc/csft.conf --all

建立增量索引:

1. 建立測試資料表以及資料

2. 修改配置檔案

主索引源:sql_query_pre

增量索引源:sql_query_pre sql_query sql_query_post

主索引:source path

增量索引:source path

3. 建立/更新主索引

4. 建立/更新增量索引

/usr/local/coreseek/bin/indexer -c /usr/local/coreseek/etc/csft.conf delta

5.重啟索引程序

/usr/local/coreseek/bin/searchd --stop

/usr/local/coreseek/bin/searchd -c /usr/local/coreseek/etc/csft.conf

索引合併

/usr/local/coreseek/bin/indexer -c /usr/local/coreseek/etc/csft.conf --merge main delta --rotate

csft.conf

配置檔案

source src1

index test1

source delta : src1

index delta : test1

建立mysql測試資料表及資料

create

table

`documents` (`id`

int(11) not

null auto_increment,`group_id`

int(11) not

null,`group_id2`

int(11) not

null,`date_added` datetime not

null,`title`

varchar(255) not

null,`content` text not

null,primary

key (`id`)) engine=innodb auto_increment=5;

insert

into

`documents`

values ('1', '1', '5', '2008-09-13 21:37:47', 'test one', 'this is my test document number one.also checking search within phrases.');

insert

into

`documents`

values ('2', '1', '6', '2008-09-13 21:37:47', 'test two', 'this is my test document number two');

insert

into

`documents`

values ('3', '2', '7', '2008-09-13 21:37:47', 'another doc', 'this is another group');

insert

into

`documents`

values ('4', '2', '8', '2008-09-13 21:37:47', 'doc number four', 'this is to test groups');

// 實現增量索引時使用的計數表

create

table sph_counter( counter_id integer

primary

keynot

null,max_doc_id integer

notnull);

php使用

<?php

header("content-type: text/html; charset=utf-8");

require_once('sphinxapi.php');

$s = new sphinxclient();

$s->setserver("127.0.0.1", 9312);

$s->setarrayresult(true);

$s->setmatchmode(sph_match_all);

$keyword = 'test';

$result = $s->query($keyword, '*');

if ($result['total'] == 0)

// 獲取結果id集

$ids = array();

foreach($result['matches'] as

$key => $val)

print_r($ids);

// 連線資料庫

$dsn = "mysql:host=localhost;dbname=test;charset=utf8";

$db = new pdo($dsn, 'root', '');

$sql = 'select * from documents where id in('.implode(',', $ids).')';

$result = $db->query($sql);

$result->setfetchmode(pdo::fetch_assoc);

$data = $result->fetchall();

// 搜尋結果高亮顯示

$rule = array(

"before_match" => "",

"after_match" => ""

);foreach ($data

as$key=>$val)

print_r($data);

新增新分詞

1. 複製unigram.txt檔案為unigram_new.txt

2. 在unigram_new.txt中新增新詞

3. 生成新的詞典檔案:/usr/local/mmseg3/bin/mmseg -u /usr/local/mmseg3/etc/unigram_new.txt

4. 替換原有的uni.lib檔案

5. 重建索引 && 重啟索引

sphinx主索引和增量索引實時更新

在資料庫資料非常龐大的時候,而且實時有新的資料插入,如果我們不更新索引,新的資料就search不到,全部重新建立索引又很消耗資源,在這種情況下我們就需要使用 主索引 增量索引 的思路來實現實時更新的功能。因為這時我們有了主索引和增量索引,主索引只需在每天凌晨更新,而增量索引的更新頻率設定的很短,這樣...

sphinx增量索引

在sphinx libmmseg搭建中文全文搜尋引擎 安裝配置中安裝試驗了sphinx的使用,但是還有幾方面的問題有待處理。用來建立索引的分詞資料 動態增量索引更新 索引在前端的介面的表現使用 本篇主要是對動態增量更新的一些研究。關於分詞資料的建立和前端介面的控制將在以後研究。在利用 sphinx ...

Sphinx增量索引

sphinx建立索引之後,如果我們的資料庫又增加了一條資料,需要重新建立索引。但是如果資料量十分龐大時,每次都重新建立索引顯然是不合適的。我們希望實現的效果是,每次都只建立新增的資料的索引。假設現在資料庫中有三條資料,id分別為1,2,3。使用indexer命令為這三條資料建立索引,並把max do...