檢測PHP-SDK的運行條件(查看是否支持XunSearch) $prefix/sdk/php/util/RequiredCheck.php $prefix #替換成你的安裝目錄 使用 XunSearch(訊搜)有很多種使用方法 和 更新索引的方法; 搜索語法• 查詢語句和流行的搜索引擎相似,通過空 ...
檢測PHP-SDK的運行條件(查看是否支持XunSearch) $prefix/sdk/php/util/RequiredCheck.php $prefix #替換成你的安裝目錄
使用 XunSearch(訊搜)有很多種使用方法 和 更新索引的方法;
搜索語法
• 查詢語句和流行的搜索引擎相似,通過空格把搜索詞、句連接起來即可,欄位檢索使用 field:XXX 的格式。
• 允許使用 AND/OR/NOT/XOR 等顯式地布爾關係組合,可以使用小括弧 () 包圍表達優先順序。
• 支持使用雙引號對較長搜索詞進行精確匹配,要求欄位設計時勾選“精確”項。
$search->search(‘ 杭州 西湖’); // 搜索同時包含這2個詞的結果
$search->search(‘ 杭州 OR 西湖’); // 搜索包含其中一個詞的結果
$search->search(‘subject:杭州 西湖’); // 包括西湖並且標題包含杭州的結果
獲取結果
• 設置數量及偏移
$search->setLimit(5, 15); // 設置最多返回 5 條,並跳過前 15 條,即返回第 16-20 條結果
• 獲取搜索結果
$docs = $search->setQuery(‘ 測試’)->search(); // 搜索 ‘ 測試’ foreach ($docs as $doc) { $subject = $search->highlight($doc->subject); // 高亮處理標題 echo $doc->rank() . ‘. ‘ . $subject . ‘ [‘ . $doc->percent() . ‘%] - ‘ . date(‘Y-m-d’) . “n”; echo $doc->message . “nn”; }
• 獲取搜索結果數量 ( 估算值)
$count = $search->getLastCount(); // 獲取最後一次 $search->search() 的匹配數量
$count = $search->count(‘測試’); // 直接檢索包含 ‘ 測試’ 的數量
熱門搜索 通過 XSSearch::getHotQuery 方法獲取熱門搜索詞,返回的數組以關鍵詞為鍵名,搜索指數為值。 $words = $search->getHotQuery(); // 獲取前 6 個總熱門搜索詞 $words = $search->getHotQuery(6, ‘lastnum’); // 獲取前 10 個上周熱門詞 相關搜索 通過 XSSearch::getRelatedQuery 方法獲取熱門搜索詞,返回相關搜索片語成的數組。 $words = $search->getRelatedQuery(); // 獲取前 6 個和最近一次 setQuery() 相關的搜索詞 $words = $search->getRelatedQuery(‘測試’, 10); // 獲取 10 個和 ‘ 測試’ 相關的搜索詞 搜索糾錯 由於輸入過快或拼音輸入中文很容易出現錯誤,XSSearch::getCorrectedQuery 方法返回糾正後的關鍵片語成的數組。 $docs = $search->setQuery(‘ 側試’)->search(); // 正常進行搜索誤打的 ‘ 側試’ $corrected = $search->getCorrectedQuery(); // 嘗試修正 if (count($corrected) > 0) { // 有修正詞則列出 echo “ 您是不是要找:n”; foreach ($corredted as $word) echo $word . “n”; } 搜索建議 類似常見搜索引擎那樣,當用戶在輸入框鍵入少量字、拼音、聲母時進行智能補全,可以節省用戶的輸入時間。 $words = $search->getExpandedQuery(‘c’); // 返回 array(‘ 測試’) $words = $search->getExpandedQuery(‘ 測’); // 返回 array(‘ 測試’) $words = $search->getExpandedQuery(‘cs’); // 返回 array(‘ 測試’)
附加XunSearch搜索結果code
#引入介面文件,其實你懂的,就是一個類 require './lib/XS.php'; // 引入 xunsearch sdk if(isset($_POST['sub']) && $_POST['keyword'] != ''){ $keyword = trim($_POST['keyword']); //接收關鍵詞 $xs = new XS('source'); // demo 為項目名稱,配置文件是:$sdk/app/demo.in i //$index = $xs->index; // 獲取索引對象 $search = $xs->search; // 獲取搜索對象 $search->setLimit(20); $docs = $search->setQuery( $keyword)->search(); // 搜索 ‘ 測試’ echo "<table border='1' bordercolor='green' cellspacing='0'><tr><th>標題</th></tr>"; foreach ($docs as $doc) { $subject = $search->highlight($doc->product_name); // 高亮處理標題 echo "<tr><td>".$subject."</td></tr>"; } echo "</table>"; // $search->setQuery($keyword); // 獲取前 6 個和預設搜索語句 "西湖" 相關搜索詞 // $words = $search->getRelatedQuery(); // print_r($words);
最常見的就有批量更新和增量更新索引,話不多說,直接看代碼;
==================== 單獨更新索引 ==========================
1- 添加文檔 (就是直接添加單條數據記錄到索引庫中)
$xs = new XS('njw');
$index = $xs->index;
$data = array(
'pid' => 234, // 此欄位為主鍵,必須指定
'subject' => '測試文檔的標題',
'message' => '測試文檔的內容部分',
'chrono' => time()
);
//創建文檔對象
$doc = new XSDocument;
$doc->setFields($data);
//添加到索引資料庫中
$index->add($doc);
2- 更新文檔 (其中$data里必須包含有主鍵欄位,這樣索引庫才會被更新成功)
$xs = new XS('njw'); $index = $xs->index; $data = array( 'pid' => 234, // 此欄位為主鍵,必須指定 'subject' => '測試文檔的標題', 'message' => '測試文檔的內容部分', 'chrono' => time() ); //創建文檔對象 $doc = new XSDocument; $doc->setFields($data); //更新到索引資料庫中 $index->update($doc);$index->add($doc); // 添加文檔,不檢測便索引庫內是否已有同一主鍵數據 $index->update($doc); // 更新文檔,若有同主鍵數據則替換之 $index->del(‘123’); // 刪除主鍵值為 234 的文檔 $index->del(array(‘123’,‘456’)); // 刪除主鍵值為 123 及 456 的文檔
附加其它索引操作說明:
================ 批量更新 ===================
3- 平滑批量重建更新索引 (批量更新索引,)
header('Content-Type:text/html;charset=utf-8;');
require_once '../../../local/xunsearch/sdk/php/lib/XS.php';
include "./mysql_conn.php";
try{
$xs = new XS('njw');
//平滑重建索引
//宣佈開始重建索引
$xs->index->beginRebuild();
$sql = "select g.id id,g.title title,g.norms norms,i.picture picture from b2b_goods g INNER JOIN b2b_goods_images i ON g.id=i.goods_id limit";
$result = $db->query($sql);
while( $row = $result -> fetch_assoc ()) {
$doc = new XSDocument;
$doc->setFields($row);
//添加到索引資料庫中
$xs->index->add($doc);
$xs->index->update($doc);
}
//告訴伺服器重建索引完成
$xs->index->endRebuild();
}catch(XSException $e){
echo $e;
}
4 - 使用緩衝區批量重建更新索引 (批量更新操作)
header('Content-Type:text/html;charset=utf-8;');
require_once '../../../local/xunsearch/sdk/php/lib/XS.php';
include "./mysql_conn.php";
try{
$xs = new XS('njw');
//使用索引緩衝區
$xs->index->openBuffer();
$sql = "select g.id id,g.title title,g.norms norms,i.picture picture from b2b_goods g INNER JOIN b2b_goods_images i ON g.id=i.goods_id";
$result = $db->query($sql);
while( $row = $result -> fetch_assoc ()) {
$doc = new XSDocument;
$doc->setFields($row);
//添加到索引資料庫中
$xs->index->add($doc);
$xs->index->update($doc);
}
//告訴伺服器重建索引完成
$xs->index->closeBuffer();
}catch(XSException $e){
echo $e;
}
清空索引和索引同步
當搜索欄位文件變更或出現嚴重不同步時,建議清空索引。
// 當搜索欄位文件變更或出現嚴重不同步時,建議清空索引。 $index->clean(); // 一執行立即生效 索引同步 出於性能優化設計,上面所看到的索引操作都是非同步操作。也就是說您通過 PHP 調用的 API 返回後,索引變動是先保存在服務端的隊列中,由服務端根據負荷延遲一併寫入索引庫。這個時間差我們控制在合理範圍內,通常是幾秒鐘時間。但如果您在批量更新後希望立即同步,可以這樣: $index->flushIndex();