基本實(shí)踐
<?php
// 引入
require_once './sdk/xs/lib/XS.php';
// 創(chuàng)建對(duì)象
$xs = new XS('demo');
// 查詢(xún)
$docs = $xs->search->search('測(cè)試');
// 輸出
print_r($docs);
異常捕獲
try
{
$xs = new XS('demo');
$docs = $xs->search->setQuery('測(cè)試')->setLimit(5)->search();
foreach ($docs as $doc)
{
echo $doc->rank() . ". " . $doc->subject . " [" . $doc->percent() . "%]\n";
echo $doc->message . "\n";
}
}
catch (XSException $e)
{
echo $e; // 直接輸出異常描述
if (defined('DEBUG')) // 如果是 DEBUG 模式,則輸出堆棧情況
echo "\n" . $e->getTraceAsString() . "\n";
}
XSDocument 文檔
docid() 取得搜索結(jié)果文檔的 docid 值 (實(shí)際數(shù)據(jù)庫(kù)內(nèi)的 id,一般用不到)
rank() 取得搜索結(jié)果文檔的序號(hào)值 (第X條結(jié)果)
percent() 取得搜索結(jié)果文檔的匹配百分比 (結(jié)果匹配度, 1~100)
weight() 取得搜索結(jié)果文檔的權(quán)重值 (浮點(diǎn)數(shù))
ccount() 取得搜索結(jié)果折疊的數(shù)量 (按字段折疊搜索時(shí)才有效)
添加操作
<?php
// 引入
require_once './sdk/xs/lib/XS.php';
try
{
$xs = new XS('demo');
$doc = new XSDocument();
$doc->pid = 4;
$doc->subject = "Hello,XS";
$doc->message = "Hello,XS內(nèi)容";
$xs->index->add($doc);
}
catch (XSException $e)
{
echo $e; // 直接輸出異常描述
if (defined('DEBUG')) // 如果是 DEBUG 模式,則輸出堆棧情況
echo "\n" . $e->getTraceAsString() . "\n";
}
<?php
// 引入
require_once './sdk/xs/lib/XS.php';
try
{
$xs = new XS('demo');
$doc = new XSDocument();
$doc['pid'] = 5;
$doc['subject'] = "Hello,XS";
$doc['message'] = "Hello,XS內(nèi)容";
$xs->index->add($doc);
}
catch (XSException $e)
{
echo $e; // 直接輸出異常描述
if (defined('DEBUG')) // 如果是 DEBUG 模式,則輸出堆棧情況
echo "\n" . $e->getTraceAsString() . "\n";
}
<?php
// 引入
require_once './sdk/xs/lib/XS.php';
try
{
$xs = new XS('demo');
$doc = new XSDocument();
$doc ->setFields([
'pid' => 6,
'subject' => "Hello,XS",
'message' => "Hello,XS內(nèi)容"
]);
$xs->index->add($doc);
}
catch (XSException $e)
{
echo $e; // 直接輸出異常描述
if (defined('DEBUG')) // 如果是 DEBUG 模式,則輸出堆棧情況
echo "\n" . $e->getTraceAsString() . "\n";
}
建立索引的過(guò)程會(huì)有點(diǎn)延遲!
$index->add($doc)->flushIndex()
可以臨時(shí)處理成同步的。
ini
string 字符型,適用多數(shù)情況,也是默認(rèn)值
numeric 數(shù)值型,包含整型和浮點(diǎn)數(shù),僅當(dāng)字段需用于以排序或區(qū)間檢索時(shí)才設(shè)為該類(lèi)型,否則請(qǐng)使用 string 即可
date 日期型,形式為 YYYYmmdd 這樣固定的 8 字節(jié),如果沒(méi)有區(qū)間檢索或排序需求不建議使用
id 主鍵型,確保每條數(shù)據(jù)具備唯一值,是索引更新和刪除的憑據(jù),每個(gè)搜索項(xiàng)目必須有且僅有一個(gè) id 字段,該字段的值不區(qū)分大小寫(xiě)
title 標(biāo)題型,標(biāo)題或名稱(chēng)字段,至多有一個(gè)該類(lèi)型的字段
body 內(nèi)容型,主內(nèi)容字段, 即本搜索項(xiàng)目中內(nèi)容最長(zhǎng)的字段,至多只有一個(gè)該類(lèi)型字段,本字段不支持字段檢索
type = string
project.name = sample
project.default_charset = GBK
;server.index = 8383
;server.search = 8384
[pid]
type = id
[subject]
type = title
[message]
type = body
[dateline]
type = numeric
[author]
index = both
[authorid]
[tid]
index = self
tokenizer = full
[fid]
index = self
tokenizer = full
[flag]
更新、修改文檔
如果索引數(shù)據(jù)庫(kù)中已存在主鍵值相同的文檔,那么相當(dāng)于先刪除原有的文檔,再用當(dāng)前文檔替換它。 如果未存在主鍵值相同的文檔,則效果和添加文檔完全一致。
<?php
// 引入
require_once './sdk/xs/lib/XS.php';
$xs = new XS('my');
$data = array(
'pid' => 2, // 此字段為主鍵,是進(jìn)行文檔替換的唯一標(biāo)識(shí)
'subject' => '測(cè)試文檔的標(biāo)題',
'message' => '測(cè)試文檔的內(nèi)容部分',
'chrono' => time()
);
// 創(chuàng)建文檔對(duì)象
$doc = new XSDocument;
$doc->setFields($data);
// 更新到索引數(shù)據(jù)庫(kù)中
$xs->index->update($doc)->flushIndex();
刪除文檔
1.按主鍵刪除
<?php
// 引入
require_once './sdk/xs/lib/XS.php';
// 創(chuàng)建xs
$xs = new XS('my');
// 創(chuàng)建index
$index = $xs->index;
// 刪除
$index->del('1')->flushIndex();
// 刪除
$index->del(['4','5'])->flushIndex();
2.按內(nèi)容刪除
<?php
// 引入
require_once './sdk/xs/lib/XS.php';
$xs = new XS('my');
// 創(chuàng)建xs
$xs = new XS('my');
// 創(chuàng)建index
$index = $xs->index;
// 刪除
$index->del('測(cè)試','subject')->flushIndex();
此外刪除操作和添加文檔一樣,也是一個(gè)異步行為。
清空索引
// 創(chuàng)建xs
$xs = new XS('my');
// 創(chuàng)建index
$index = $xs->index;
// 刪除
$index->clean();
平滑重建索引
<?php
// 引入
require_once './sdk/xs/lib/XS.php';
// 創(chuàng)建xs
$xs = new XS('my');
// 創(chuàng)建index
$index = $xs->index;
// 宣布開(kāi)始重建索引
$index->beginRebuild();
// 然后在此開(kāi)始添加數(shù)據(jù)
$data = array(
'pid' => 2, // 此字段為主鍵,是進(jìn)行文檔替換的唯一標(biāo)識(shí)
'subject' => '測(cè)試文檔的標(biāo)題',
'message' => '測(cè)試文檔的內(nèi)容部分',
'chrono' => time()
);
// 創(chuàng)建文檔對(duì)象
$doc = new XSDocument;
$doc->setFields($data);
$index->add($doc);
// 告訴服務(wù)器重建完比
$index->endRebuild();
使用索引緩沖區(qū)
一次性提交服務(wù)操作
<?php
// 引入
require_once './sdk/xs/lib/XS.php';
// 創(chuàng)建xs
$xs = new XS('my');
// 創(chuàng)建index
$index = $xs->index;
// 開(kāi)啟緩沖區(qū),默認(rèn) 4MB,如 $index->openBuffer(8) 則表示 8MB
$index->openBuffer();
// 然后在此開(kāi)始添加數(shù)據(jù)
$data = array(
'pid' => 2, // 此字段為主鍵,是進(jìn)行文檔替換的唯一標(biāo)識(shí)
'subject' => '測(cè)試文檔的標(biāo)題',
'message' => '測(cè)試文檔的內(nèi)容部分',
'chrono' => time()
);
// 創(chuàng)建文檔對(duì)象
$doc = new XSDocument;
$doc->setFields($data);
// 在此進(jìn)行批量的文檔添加、修改、刪除操作
$index->add($doc);
$index->add($doc);
$index->add($doc);
$index->add($doc);
$index->add($doc);
$index->add($doc);
$index->closeBuffer(); // 關(guān)閉緩沖區(qū),必須和 openBuffer 成對(duì)使用
自定義 SCWS 詞庫(kù)
1.全局自定義詞庫(kù)
$prefix/etc/dict_user.txt
# Custom dictionary for scws (UTF-8 encoding)
# 每行一條記錄,以 # 開(kāi)頭的號(hào)表示注釋忽略
# 每行最多包含 4 個(gè)字段,依次代表 "詞條" "TF" "IDF" "詞性"
# 字段之間用空格或制表符分開(kāi),特殊詞性 "!" 用于表示刪除該詞
# 參見(jiàn) scws 自定義詞典幫助:
# http://bbs.xunsearch.com/showthread.php?tid=1303
# $Id$
#
# WORD TF IDF ATTR
# ------------------------------------------------------
2.項(xiàng)目自定義詞庫(kù)(這個(gè)貌似更好的讀?。?/p>
$prefix/data/項(xiàng)目名稱(chēng)/dict_user.txt
轉(zhuǎn)載https://www.cnblogs.com/jiqing9006/p/9254726.html
手冊(cè)https://api.yuhal.com/file/xs_php_manual.chm