xunsearch进阶使用

设置分页

$search->setLimit(5); // 设置返回结果为前 5 条
$search->setLimit(5, 15); // 设置返回结果为 5 条,但要先跳过 15 条,即第 16~20 条。

设置排序

$search->setSort('chrono'); // 按 chrono 字段的值倒序
$search->setSort('chrono', true); // 按 chrono 字段的值正序排列
// 表示先以 chrono 正序、再以 pid 逆序(pid 是字符串并不是数值所以 12 会排在 3 之后)
$sorts = array('chrono' => true, 'pid' => false);
 
// 如果直接把字段名作为数组的值,默认对该字段采用逆序,因此以上用法和下面用法是完全一样的
$sorts = array('chrono', 'pid' => false);
 
// 设置搜索排序
$search->setMultiSort($sorts);

读取文档结果

// 以 demo 项目的配置为例
$docs = $search->setQuery('测试')->setLimit(5)->search();
foreach ($docs as $doc)
{
   // 其中常用魔术方法:percent() 表示匹配度百分比, rank() 表示匹配结果序号
   echo $doc->rank() . '. ' . $doc->subject . " [" . $doc->percent() . "%] - ";
   echo date("Y-m-d", $doc->chrono) . "\n" . $doc->message . "\n";
}

搜索结果高亮处理

$docs = $search->setQuery('测试')->setLimit(5)->search();
foreach ($docs as $doc)
{
   $subject = $search->highlight($doc->subject); // 高亮处理 subject 字段
   $message = $search->highlight($doc->message); // 高亮处理 message 字段
   echo $doc->rank() . '. ' . $subject . " [" . $doc->percent() . "%] - ";
   echo date("Y-m-d", $doc->chrono) . "\n" . $message . "\n";
}

获取数量

$total = $search->dbTotal;
$total = $search->getDbTotal();
// 先设置 Query 再获取数量
$count = $search->setQuery('神雕侠侣 -电视剧')->count();
 
// 直接把 Query 语句传入
$count = $search->count('杭州 西湖');

获取热门搜索词

$words = $search->getHotQuery(); // 获取前 6 个总热门搜索词
$words = $search->getHotQuery(10, 'lastnum'); // 获取前 10 个上周热门词

获取相关搜索词

$search->setQuery('西湖');
// 获取前 6 个和默认搜索语句 "西湖" 相关搜索词
$words = $search->getRelatedQuery();
 
// 获取 10 个和 "杭州" 相关的搜索词
$words = $search->getRelatedQuery('杭州', 10);
posted @ 2018-07-02 18:15  TBHacker  阅读(609)  评论(0编辑  收藏  举报