栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > PHP > php开源框架 > xunsearch

xunsearch mysql 索引

xunsearch 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

xunsearch mysql 索引

检测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 "

标题

foreach ($docs as $doc) {

$subject = $search->highlight($doc->product_name); // 高亮处理标题

echo "

".$subject."";

}

echo "

";

// $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();

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/863716.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号