coreseek 中文搜索和高亮

配置文件

#
# Minimal Sphinx configuration sample (clean, simple, functional)
#

source post
{
    type                    = mysql

    sql_host                = 192.168.33.90
    sql_user                = root
    sql_pass                = root
    sql_db                    = test
    sql_port                = 3306    # optional, default is 3306
    sql_sock                                = /tmp/mysql.sock
    sql_query_pre = SET NAMES utf8
    sql_query_pre = SET SESSION query_cache_type=OFF
    sql_query                =         SELECT * from post

    sql_query_info            = SELECT * FROM post WHERE id=$id
}

index post
{
    source                    = post
    path                    = /usr/local/coreseek/var/data/post

    charset_type            = zh_cn.utf-8
    charset_dictpath                = /usr/local/mmseg/etc/
}

indexer
{
    mem_limit                = 32M
}

searchd
{
    port                    = 9312
    log                        = /usr/local/coreseek/var/log/searchd.log
    query_log                = /usr/local/coreseek/var/log/query.log
    read_timeout            = 5
    max_children            = 30
    pid_file                = /usr/local/coreseek/var/log/searchd.pid
    max_matches                = 1000
    seamless_rotate            = 1
    preopen_indexes            = 0
    unlink_old                = 1
}

数据库数据

/*
Navicat MySQL Data Transfer

Source Server         : 33.90
Source Server Version : 50548
Source Host           : 192.168.33.90:3306
Source Database       : test

Target Server Type    : MYSQL
Target Server Version : 50548
File Encoding         : 65001

Date: 2016-11-25 22:52:55
*/

SET FOREIGN_KEY_CHECKS=0;

-- ----------------------------
-- Table structure for `post`
-- ----------------------------
DROP TABLE IF EXISTS `post`;
CREATE TABLE `post` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `title` varchar(100) DEFAULT NULL,
  `content` text,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=11 DEFAULT CHARSET=utf8;

-- ----------------------------
-- Records of post
-- ----------------------------
INSERT INTO `post` VALUES (‘1‘, ‘linux1‘, ‘linux11‘);
INSERT INTO `post` VALUES (‘2‘, ‘php1‘, ‘php11‘);
INSERT INTO `post` VALUES (‘3‘, ‘php1‘, ‘php222‘);
INSERT INTO `post` VALUES (‘4‘, ‘php3‘, ‘php333‘);
INSERT INTO `post` VALUES (‘5‘, ‘php5‘, ‘php333‘);
INSERT INTO `post` VALUES (‘8‘, ‘兄弟连‘, ‘格兰仕的减肥了开始的减肥了时间发‘);
INSERT INTO `post` VALUES (‘7‘, ‘linux is very good‘, ‘ linux is aaaaaaa连‘);
INSERT INTO `post` VALUES (‘9‘, ‘时间‘, ‘收到减肥老兄弟‘);
INSERT INTO `post` VALUES (‘10‘, ‘二位二位二时间‘, ‘lamp兄弟连‘);

php代码

<?php
header("Content-type:text/html;charset=utf-8");
ini_set("display_errors",1);
error_reporting(E_ALL);
$keyword = $_GET[‘key‘];
//实例化Sphinx对象
$sphinx=new SphinxClient();

//连接sphinx服务器
$sphinx->SetServer("192.168.33.90",9312);
//拆词
//SPH_MATCH_ALL 和 SPH_MATCH_ANY 的区别:
//搜索“LAMP兄弟连”,ALL的结果:完整包含“LAMP兄弟连”才能被搜出来,
//单纯包含“LAMP”或单纯包含“兄弟连”的搜索不出来,没有拆词的功能。
//ANY则可以搜索出来拆开后的词的结果。此处使用ANY
$sphinx->SetMatchMode(SPH_MATCH_ANY);
//通过query方法搜索,“*”表示在所有的索引中搜索,相当于命令行里面的“./indexer --all”
$result=$sphinx->query("$keyword","*");
//打印搜索的结果
// echo "<pre>";
// print_r($result);
// echo "</pre>";

//上面打印的结果中,数组的 [matches]循环便利,下标就是搜索到的文档的主键Id
//使用PHP中的 array_keys()函数即可拿到下标,即:要查找的文档的主键
//print_r(array_keys($result[‘matches‘]));
//结果如下:Array([0]=>1)

//使用implode或者 join用逗号把查询出来的主键连接起来:
$ids = join(‘,‘,array_keys($result[‘matches‘]));
//echo $ids; //6,7

/*连接数据库的操作*/
$p1 = mysql_connect("192.168.33.90","root","root");
mysql_select_db("test");
mysql_query("set names utf8");
$sql="select * from post where id in ($ids)";
$rst=mysql_query($sql);

$opts=array(
   "before_match"=>"<font color=‘red‘>",
   "after_match"=>"</font>",
);
while($row=mysql_fetch_assoc($rst)){

    //下面是高亮显示所需,具体可以查手册
    $final=$sphinx->buildExcerpts($row,"post",$keyword,$opts);

    echo "标题:".$final[‘1‘]."<br>";
    echo $final[2].‘<hr>‘;
}

?>

效果图片:

时间: 2024-12-15 07:01:22

coreseek 中文搜索和高亮的相关文章

coreseek中文搜索

coreseek的安装和使用 准备软件包 coreseek-3.2.14.tar.gz 其他汁源 coreseek中文索引-示例文件.zip sphinx配置文件详解.txt 1.安装组件 yum -y install make gcc g++ gcc-c++ libtool autoconf automake imake mysql-devel libxml2-devel expat-devel 2.安装mmseg $ cd /usr/local/tools/ $ tar xf coresee

Linux下PHP+MySQL+CoreSeek中文检索引擎配置

说明: 操作系统:CentOS 5.X 服务器IP地址:192.168.21.127 Web环境:Nginx+PHP+MySQL 站点根目录:/usr/local/nginx/html 目的:安装coreseek中文检索引擎,配置MySQL数据库访问接口,使用PHP程序实现中文检索. CoreSeek官方网站: http://www.coreseek.cn/ http://www.coreseek.cn/products/=%22/products-install/step_by_step/ h

coreseek 中文检索

简单介绍:最近有人在问我,说mysql5.6既然已经支持了Innodb的全文索引了,为什么依然有人在使用sphinx这样的软件针对mysql 数据库呢. 第一:目前仍然后很多公司在使用mysql5.5,针对innodb 存储引擎则需要全文索引的软件来帮忙 第二:mysql并不是一款中国人开发的服务,因此对中文分词的支持是不行的,由此引出接下来所要讲解的coreseek 中文检索 因有童鞋对安装和基本使用有困惑,因而将本人的基本操作写上,如有疑问请留言 安装 稳定版 wget http://219

solr中文搜索倒排索引和数据存储结构

作为搜索,我们传统的方式(正排索引)是从关键点出发,然后再通过关键点找到关键点代表的信息中能够满足搜索条件的特定信息,既通过KEY寻找VALUE.而Lucene的搜索则是采用了倒排索引的方式,即通过VALUE找KEY.而在中文全文搜索中VALUE就是我们要搜索的单词,存放所有单词的地方叫词典.KEY是文档标号列表(通过文档标号列表我们可以找到出现过要搜索单词VALUE的文档).正排索引从文档编号找词: 倒排索引是从词找文档编号: 当文档数据来临时,solr会首先对文档数据进行分词,创建索引库和文

helm-mode打开文件支持中文搜索

.title { text-align: center; margin-bottom: .2em } .subtitle { text-align: center; font-size: medium; font-weight: bold; margin-top: 0 } .todo { font-family: monospace; color: red } .done { font-family: monospace; color: green } .priority { font-fami

如何解决Firefox浏览器地址栏中文搜索速度很慢

一.插件安装 之前使用Chrome浏览器,习惯在地址栏中直接进行中文搜索.转到Firefox之后,突然发现在地址栏进行中文搜索,访问速度会很慢. 可以使用插件解决这个问题:Omnibar 插件地址:https://addons.mozilla.org/zh-CN/firefox/addon/omnibar/ 二.添加搜索引擎 安装之后默认使用Google搜索,如图. 由于一些原因,Google搜索可能不能使用,所以这里要更改搜索引擎. 点击Google --> Manage Search Eng

在 Angular 中实现搜索关键字高亮

在 Angular 中,我们不应该试图直接修改 DOM 的内容,当需要更新 DOM 内容的时候,应该修改的其实是我们的数据模型,也就是 $scope 中的数据,Angular 会帮助我们将修改之后的数据展示在页面中. 但是,在有些情况下,比如我们有一个搜索框,希望将搜索的关键字在正文中高亮出来,这时候就会感觉比较吃力了,filter 可以帮助我们处理这种情况. 实际上,很多时候,我们的数据是不能直接输出到 DOM 中的,典型的比如日期,或者货币等等,通常需要将我们内部的数据格式化之后,再输出到页

如何通过js使搜索关键词高亮

给你推荐通过jquery来实现高亮关键词.jquery.textSearch-1.0.js代码: (function($){ $.fn.textSearch =function(str,options){ var defaults ={ divFlag:true, divStr:" ", markClass:"", markColor:"red", nullReport:true, callback:function(){ returnfalse

中文搜索翻页乱码问题

使用中文作为关键字搜索,当结果条数很多的时候,肯定会用到翻页.一般的翻页做法,是采用get方式提交.这种情况下翻页,搜索关键字作为参数,会附在url后传递,到后台的时候,已经乱码.返回页面显示当然也是乱码的.解决的代码如下: keyWord = new String(keyWord.getBytes("ISO-8859-1"),"utf-8"); keyword即为传递到后台的搜索关键字. 中文搜索翻页乱码问题