实践中 XunSearch(讯搜)更新索引方案对比
2017-02-07 09:08
281 查看
检测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 条结果
• 获取搜索结果
$count = $search->count(‘测试’); // 直接检索包含 ‘ 测试’ 的数量
$index->update($doc); // 更新文档,若有同主键数据则替换之
$index->del(‘123’); // 删除主键值为 234 的文档
$index->del(array(‘123’,‘456’)); // 删除主键值为 123 及 456 的文档 ================ 批量更新 ===================3- 平滑批量重建更新索引 (批量更新索引,)
• 查询语句和流行的搜索引擎相似,通过空格把搜索词、句连接起来即可,字段检索使用 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();
相关文章推荐
- 实践中 XunSearch(讯搜)更新索引方案对比
- 关于通过聚集索引以及堆来对比数据表组织结构-SQLServer最优实践 的一点看法
- i8服务器虚拟盘和对比更新分离双网卡分流方案(一只乌鸦)
- iOS 动态更新方案 JSPatch 与 React Native 的对比
- Maven使用技巧001--- 离线更新nexus中央仓库索引的方案
- git原理与实践知识索引——持续更新
- Unity官方公布热更新方案性能对比
- 微信热更新方案实践
- 关于通过聚集索引以及堆来对比数据表组织结构-SQLServer最优实践 的一点看法
- iOS 动态更新方案对比:JSPatch vs React Native
- 前端通信:SSE设计方案(二)--- 服务器推送技术的实践以及一些应用场景的demo(包括在线及时聊天系统以及线上缓存更新,代码热修复案例)
- 大数据量的存储建议方案(不断更新,希望大家给建议)
- Google索引更新,算法更新,数据刷新
- SQL数据库管理系统的优化方案(表的主键、外键、索引设计)
- 项目管理实践教程 索引
- TMD,搞了半天,GridView更新时,提示“索引超出范围。必须为非负值并小于集合大小”
- NBearV2视频教学系列总索引,欢迎多提意见和建议[09/21更新至IoC篇]
- 跟麻烦说拜拜 劲舞团快速更新方案
- SQL数据库管理系统的优化方案(表的主键、外键、索引设计)