检测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();

  

实践中 XunSearch(讯搜)更新索引方案对比的更多相关文章

  1. 实践中 XunSearch(讯搜)的使用教程步骤

    XunSearch(讯搜)的使用教程步骤 一.安装编译工具 yum install make gcc g++ gcc-c++ libtool autoconf automake imake mysql ...

  2. 空间搜索(圆范围)中Geohash编码方案和网格编码方案对比探讨

    文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/ 1.背景 多个项目中实现范围(圆)搜索的方案为:依赖库表中的X和Y字段构 ...

  3. JAVA面试中问及HIBERNATE与 MYBATIS的对比,在这里做一下总结

    我是一名java开发人员,hibernate以及mybatis都有过学习,在java面试中也被提及问道过,在项目实践中也应用过,现在对hibernate和mybatis做一下对比,便于大家更好的理解和 ...

  4. JAVA面试中问及HIBERNATE与 MYBATIS的对比,在这里做一下总结(转)

    hibernate以及mybatis都有过学习,在java面试中也被提及问道过,在项目实践中也应用过,现在对hibernate和mybatis做一下对比,便于大家更好的理解和学习,使自己在做项目中更加 ...

  5. unity 热更方案对比

    现在一般使用的方案有:tulua&ulua.xlua.ILRuntime 对比: tulua&ulua 方案成熟,稳定第三方库支持 xlua 之前是为了热更修复线上bug的,腾讯发起的 ...

  6. [硬件项目] 2、汽车倒车雷达设计——基于专用倒车雷达芯片GM3101的设计方案与采用CX20106A红外线检测芯片方案对比

    前言 尽管每辆汽车都有后视镜,但不可避免地都存在一个后视镜的盲区,倒车雷达则可一定程度帮助驾驶员扫除视野死角和视线模糊的缺陷,提高驾驶安全性.上一节已经分析清倒车雷达的语音模块(上一节),本节将深入分 ...

  7. 大规模Hadoop集群实践:腾讯分布式数据仓库(TDW)

    TDW 是腾讯最大的离线数据处理平台.本文主要从需求.挑战.方案和未来计划等方面,介绍了TDW在建设单个大规模集群中采取的 JobTracker 分散化和 NameNode 高可用两个优化方案. TD ...

  8. 实践中总结——理解haslayout和BFC

    1.HASLAYOUT 首先,haslayout翻译成中文就是:有布局. 所谓布局,指的是一个元素可以对本身和里边的元素进行尺寸计算和定位.这里只是谈IE6/7,据说微软之所以不是对所有元素默认有布局 ...

  9. 谈谈在DevOps实践中,感觉最重要的这三个技术……

    从国内众多DevOps实践中,我们能看到下面三个技术尤其重要和火热: 容器:容器从根本上解决了软件对环境的依懒性,解决了各个环境之间的差异问题:它可以加速部署的速度,提高部署的效率:降低部署的成本.容 ...

随机推荐

  1. php导出excel不使用科学计数法

    在变量前后拼接上制表符 foreach($orderList as $k=>$v){ $orderList[$k]['pos_id'] = "\t".$v['pos_id'] ...

  2. ES中的分词器

    基本概念: 全文搜索引擎会用某种算法对要建索引的文档进行分析, 从文档中提取出若干Token(词元), 这些算法称为Tokenizer(分词器), 这些Token会被进一步处理, 比如转成小写等, 这 ...

  3. dotnet不是内部或外部的命令,也不是可运行的程序或批处理文件

    该问题是由于电脑环境变量配置错误所导致.最初在网上查找的方法,是在系统环境变量path中添加以下语句: %SystemRoot%\system32;%SystemRoot%;%SystemRoot%\ ...

  4. java钉钉通讯录同步

    钉钉做了好好几个项目了,和阿里云还有阿里钉钉合作也挺不错.因为之前就做过微信公众号,接触钉钉感觉还是比较顺手的,虽然也有一些不一样的地方. 因为之前写了一个微信公众号的开发文档,一直想写一个钉钉的开发 ...

  5. 2018-2019-2 20175218 实验一《Java开发环境的熟悉》实验报告

    实验内容.步骤与体会: 1.实验过程的理解,实验指导书中知识点的理解. (1)知道了JVM.JRE.JDK之间的区别. JVM就是我们熟知的Java虚拟机:JRE是Java运行环境:而JDK则是Jav ...

  6. 关于webApi 跨域请求

    先说一下我的项目,后台单纯的webApi,前端采用Vue+axios, 说一下我遇见的问题,axios请求webAPI但是浏览器会报错,大致上就是不允许跨域请求. 于是查找解决办法发现以下代码(web ...

  7. Python中日期和时间格式化输出的方法

    本文转自:https://www.jb51.net/article/62518.htm 本文实例总结了python中日期和时间格式化输出的方法.分享给大家供大家参考.具体分析如下: python格式化 ...

  8. easyui 单元格超出鼠标放上弹出全部

    其他方式:https://www.cnblogs.com/raitorei/p/9878192.html onLoadSuccess : function(data) { //单元格超出部分隐藏并鼠标 ...

  9. django settings配置文件ALLOWED_HOSTS

    ALLOWED_HOSTS列表为了防止黑客入侵,只允许列表中的ip地址访问 填写上“*”可以使所有的网址都能访问Django项目了,项目测试的时候,可以这么做.这样就失去了保护

  10. 使用react-handsontable

    新建一个项目 create-react-app myProject cd myProject npm install handsontable 或者 npm install handsontable- ...