xunsearch基本使用


基本實踐

<?php
// 引入
require_once './sdk/xs/lib/XS.php';

// 創建對象
$xs = new XS('demo');

// 查詢
$docs = $xs->search->search('測試');

// 輸出
print_r($docs);

異常捕獲

try
{
    $xs = new XS('demo');
    $docs = $xs->search->setQuery('測試')->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() 取得搜索結果文檔的 docid 值 (實際數據庫內的 id,一般用不到)
rank() 取得搜索結果文檔的序號值 (第X條結果)
percent() 取得搜索結果文檔的匹配百分比 (結果匹配度, 1~100)
weight() 取得搜索結果文檔的權重值 (浮點數)
ccount() 取得搜索結果折疊的數量 (按字段折疊搜索時才有效)

添加操作

<?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內容";
    $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內容";
    $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內容"
    ]);

    $xs->index->add($doc);
}
catch (XSException $e)
{
    echo $e;               // 直接輸出異常描述
    if (defined('DEBUG'))  // 如果是 DEBUG 模式,則輸出堆棧情況
        echo "\n" . $e->getTraceAsString() . "\n";
}

建立索引的過程會有點延遲!

$index->add($doc)->flushIndex()

可以臨時處理成同步的。

ini

string 字符型,適用多數情況,也是默認值
numeric 數值型,包含整型和浮點數,僅當字段需用於以排序或區間檢索時才設為該類型,否則請使用 string 即可
date 日期型,形式為 YYYYmmdd 這樣固定的 8 字節,如果沒有區間檢索或排序需求不建議使用
id 主鍵型,確保每條數據具備唯一值,是索引更新和刪除的憑據,每個搜索項目必須有且僅有一個 id 字段,該字段的值不區分大小寫
title 標題型,標題或名稱字段,至多有一個該類型的字段
body 內容型,主內容字段, 即本搜索項目中內容最長的字段,至多只有一個該類型字段,本字段不支持字段檢索
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]

更新、修改文檔

如果索引數據庫中已存在主鍵值相同的文檔,那么相當於先刪除原有的文檔,再用當前文檔替換它。 如果未存在主鍵值相同的文檔,則效果和添加文檔完全一致。

<?php
// 引入
require_once './sdk/xs/lib/XS.php';

$xs = new XS('my');
$data = array(
    'pid' => 2, // 此字段為主鍵,是進行文檔替換的唯一標識
    'subject' => '測試文檔的標題',
    'message' => '測試文檔的內容部分',
    'chrono' => time()
);

// 創建文檔對象
$doc = new XSDocument;
$doc->setFields($data);

// 更新到索引數據庫中
$xs->index->update($doc)->flushIndex();

刪除文檔

1.按主鍵刪除

<?php
// 引入
require_once './sdk/xs/lib/XS.php';

// 創建xs
$xs = new XS('my');
// 創建index
$index = $xs->index;
// 刪除
$index->del('1')->flushIndex();

// 刪除
$index->del(['4','5'])->flushIndex();

2.按內容刪除

<?php
// 引入
require_once './sdk/xs/lib/XS.php';


$xs = new XS('my');

// 創建xs
$xs = new XS('my');
// 創建index
$index = $xs->index;
// 刪除
$index->del('測試','subject')->flushIndex();

此外刪除操作和添加文檔一樣,也是一個異步行為。

清空索引

// 創建xs
$xs = new XS('my');
// 創建index
$index = $xs->index;
// 刪除
$index->clean();

平滑重建索引

<?php
// 引入
require_once './sdk/xs/lib/XS.php';

// 創建xs
$xs = new XS('my');
// 創建index
$index = $xs->index;
// 宣布開始重建索引
$index->beginRebuild();

// 然后在此開始添加數據
$data = array(
    'pid' => 2, // 此字段為主鍵,是進行文檔替換的唯一標識
    'subject' => '測試文檔的標題',
    'message' => '測試文檔的內容部分',
    'chrono' => time()
);

// 創建文檔對象
$doc = new XSDocument;
$doc->setFields($data);

$index->add($doc);


// 告訴服務器重建完比
$index->endRebuild();

使用索引緩沖區

一次性提交服務操作

<?php
// 引入
require_once './sdk/xs/lib/XS.php';

// 創建xs
$xs = new XS('my');
// 創建index
$index = $xs->index;

// 開啟緩沖區,默認 4MB,如 $index->openBuffer(8) 則表示 8MB
$index->openBuffer();

// 然后在此開始添加數據
$data = array(
    'pid' => 2, // 此字段為主鍵,是進行文檔替換的唯一標識
    'subject' => '測試文檔的標題',
    'message' => '測試文檔的內容部分',
    'chrono' => time()
);

// 創建文檔對象
$doc = new XSDocument;
$doc->setFields($data);
// 在此進行批量的文檔添加、修改、刪除操作
$index->add($doc);
$index->add($doc);
$index->add($doc);
$index->add($doc);
$index->add($doc);
$index->add($doc);


$index->closeBuffer(); // 關閉緩沖區,必須和 openBuffer 成對使用


自定義 SCWS 詞庫

1.全局自定義詞庫

$prefix/etc/dict_user.txt
# Custom dictionary for scws (UTF-8 encoding)
# 每行一條記錄,以 # 開頭的號表示注釋忽略
# 每行最多包含 4 個字段,依次代表 "詞條" "TF" "IDF" "詞性"
# 字段之間用空格或制表符分開,特殊詞性 "!" 用於表示刪除該詞
# 參見 scws 自定義詞典幫助:
# http://bbs.xunsearch.com/showthread.php?tid=1303
# $Id$
#
# WORD		TF		IDF		ATTR
# ------------------------------------------------------

2.項目自定義詞庫(這個貌似更好的讀取)

$prefix/data/項目名稱/dict_user.txt


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM