PHP XunSearch基本使用

image

基本實(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

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀(guān)點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • ORA-00001: 違反唯一約束條件 (.) 錯(cuò)誤說(shuō)明:當(dāng)在唯一索引所對(duì)應(yīng)的列上鍵入重復(fù)值時(shí),會(huì)觸發(fā)此異常。 O...
    我想起個(gè)好名字閱讀 5,986評(píng)論 0 9
  • 索引是應(yīng)用程序設(shè)計(jì)和開(kāi)發(fā)的一個(gè)重要方面。 若索引太多, 應(yīng)用程序的性能可能會(huì)受到影響。 而索引太少, 對(duì)查詢(xún)性能又...
    好好學(xué)習(xí)Sun閱讀 1,118評(píng)論 0 4
  • 一、 列屬性 真正的對(duì)列的約束是依賴(lài)于數(shù)據(jù)的類(lèi)型,但是這種約束比較單一,所以需要更多的約束,整個(gè)時(shí)候就是用到了字段...
    致自己_cb38閱讀 489評(píng)論 0 0
  • 香樟是我很喜歡的植物之一,在上海也比較常見(jiàn),幾乎所有的大學(xué)都會(huì)有香樟,馬路也會(huì)有,當(dāng)然以前發(fā)租界區(qū)域會(huì)以法國(guó)梧桐為...
    小草在成長(zhǎng)Anna閱讀 164評(píng)論 0 1
  • 光位是指光源相對(duì)于被攝體的位置,即光線(xiàn)的方向與角度。 光位是攝影用光中需要考慮的重要環(huán)節(jié)。不同光位的造型效果和質(zhì)感...
    胡子拉碴的菇?jīng)?/span>閱讀 2,568評(píng)論 0 0

友情鏈接更多精彩內(nèi)容