<html> <head> <meta http-equiv="content-type" content="text/html;charset=gbk" /> <title>coreseek中文全文搜索在php程序中的应用</title> </head> <body> <h3><font color="blue">coreseek全文搜索在php程序中应用</font></h3> <form action="xs.php" method="post"> 输入搜索的关键词:<input type="text" name="keyword" size="30" <?php echo $_POST['keyword'];?> /> <input type="submit" name="sub" value="搜索" /> </form> <hr /> <?php echo "<pre />"; #引入接口文件,其实你懂的,就是一个类 require_once '/usr/local/xunsearch/sdk/php/lib/XS.php'; // 引入 xunsearch sdk if(isset($_POST['sub']) && $_POST['keyword'] != ''){ $keyword = trim($_POST['keyword']); //接收关键词 $xs = new XS('demo'); // demo 为项目名称,配置文件是:$sdk/app/demo.in i //$index = $xs->index; // 获取索引对象 $search = $xs->search; // 获取搜索对象 //模糊匹配 // $where = " subject:$keyword";//查询条件 // $search->search('上海人民公园'); // 检索 body 型字段及混合区 // $search->search('上海 人民公园'); // 用空格连接 2 个关键词, 这种情况比上面的用法更明确 // $search->search('subject:上海 人民公园'); // 特别要求 subject 字段包含 "上海" // $search->setFuzzy()->search('上海公园'); // 开启模糊搜索,搜索 "上海" 或 "公园" //$words = $search->getHotQuery(); // 获取前 6 个总热门搜索词 // $words = $search->getHotQuery(10, 'lastnum'); // 获取前 10 个上周热门词 // 表示先以 chrono 正序、再以 pid 逆序(pid 是字符串并不是数值所以 12 会排在 3 之后) // $sorts = array('chrono' => true, 'pid' => false); // 如果直接把字段名作为数组的值,默认对该字段采用逆序,因此以上用法和下面用法是完全一样的 // $sorts = array('chrono', 'pid' => false); // 设置搜索排序 // $search->setMultiSort($sorts); // $search->setSort('pid'); // 按 chrono 字段的值倒序 // $search->setSort('chrono', true); // 按 chrono 字段的值正序排列 // $search->setLimit(5); // 设置返回结果为前 5 条 // $search->setLimit(5, 15); // 设置返回结果为 5 条,但要先跳过 15 条,即第 16~20 条。 /** * 以下拼写示例则简化,并直接传入 Query 语句进行测试 * 您也可以例句用 `util/Quest.php demo --correct <word>` 进行测试 */ // print_r($search->getCorrectedQuery('gw')); // 通过声母缩写得到建议: "测试" // $search->getCorrectedQuery('ceshi'); // 通过全拼缩写得到建议: "测试" // $search->getCorrectedQuery('yunsearch'); // 通过拼写纠错得到: xunsearch // $search->getCorrectedQuery('xunseach 侧试'); // 混合纠错得到: xunsearch测试 // echo $search->getQuery('杭州 西湖'); // 搜索包含 "杭州" 的结果,并且提升 subject 字段包含 "西湖" 的数据的排序 // $docs = $search->setQuery('杭州')->addWeight('subject', '西湖')->search(); // $from = strtotime("2011-1-1"); // 起始时间 2011年1月1日 // $to = strtotime("2011-9-1"); // 结束时间 2011年9月1日 // // // 1. <= $to: 要求结果的时间必须在 2011-9-1 之前,并且包含 2011-9-1 // $docs = $search->setQuery('杭州')->addRange('chrono', null, $to)->search(); // // // 2. >= $from: 要求结果的时间必须在 2011-1-1 之后,并且包含 2011-1-1 // $docs = $search->setQuery('杭州')->addRange('chrono', $from, null)->search(); // // // 3. > $from && <= $to: 要求结果的时间必须在 2011-1-1 之后 并且 2011-9-1 之前 // $docs = $search->setQuery('杭州')->addRange('chrono', $from, $to)->search(); // $search->getExpandedQuery($keyword); // 返回:项目, xunsearch, 行为, 项目测试 // $search->getExpandedQuery('xm'); // 返回:项目, 项目测试 // $search->getExpandedQuery('项'); // 返回:项目, 项目测试 // $search->getExpandedQuery('项目'); // 返回:项目测试 $search->setLimit(1000);//设置查询条数 $docs = $search->setFuzzy()->search($keyword); // 搜索 ‘ 测试’ echo $search->getLastCount();//获取条数 // 获取前 6 个和默认搜索语句 "西湖" 相关搜索词 // $words = $search->getRelatedQuery(); // 获取 10 个和 "杭州" 相关的搜索词 // $words = $search->getRelatedQuery($keyword, 10); // 由于拼写错误,这种情况返回的数据量可能极少甚至没有,因此调用下面方法试图进行修正 // $corrected = $search->getCorrectedQuery(); // print_r($corrected); // if (count($corrected) !== 0) // { // // 有纠错建议,列出来看看;此情况就会得到 "测试" 这一建议 // echo "您是不是要找:\n"; // foreach ($corrected as $word) // { // echo $word . "\n"; // } // } echo "<table border='1' bordercolor='green' cellspacing='0'><tr><th>编号</th><th>标题</th><th>内容</th></tr>"; foreach ($docs as $doc) { $pid = $search->highlight($doc->pid); // 高亮处理标题 $subject = $search->highlight($doc->subject); // 高亮处理标题 $subject1 = $search->highlight($doc->message); // 高亮处理标题 echo "<tr><td>".$pid."</td><td>".$subject."</td><td>".$subject1."</td></tr>"; } echo "</table>"; // $search->setQuery($keyword); // // 获取前 6 个和默认搜索语句 "西湖" 相关搜索词 // $words = $search->getRelatedQuery(); // print_r($words); } ?>
测试xunsearch
最新推荐文章于 2021-04-01 15:30:18 发布