1、下载地址 http://sphinxsearch.com/downloads/release/

2、将其解压到D:\sphinx,并在D:\sphinx下新建目录data(用来存放索引文件)与log(用来存放日志文件);

3、将D:\sphinx\sphinx.conf.in复制到D:\sphinx\bin\sphinx.conf.in,并重命名为sphinx.conf;

4、修改sphinx.conf的内容

首先把sphinx.conf各个保存路径改为咱们 斯芬克司 放置的路径

4.1、搜索source src1修改{...}中的内容//这是索引源

# 使用的数据库类型

type = mysql

# 服务器

sql_host = localhost

# 数据库登录名

sql_user = root

# 数据库登录密码

sql_pass = root

# 操作的数据库名称

sql_db = test

# 数据库服务器端口

sql_port = 3306

# 设置mysql检索编码,特别要注意这点,很多人中文检索不到数据库的编码是GBK或其他非UTF8

sql_query_pre = SET NAMES utf-8

(以上7条前如有#将其删除)

#获取数据的sql

//看到这个地方

sql_query= \

SELECT id, group_id, UNIX_TIMESTAMP(date_added) AS date_added, title, content \

FROM documents

#用于命令界面端的测试(cli)

sql_query_info = SELECT * FROM documents WHERE id=$id

4.2、搜索index test1修改{...}中的内容//索引

#声明索引源

source = src1

# 放索引的目录及索引的文件名

path = D:/sphinx/data/test1

##### 文档信息存储方式

docinfo = extern

# 编码

charset_type = utf-8

# 指定utf-8编码表,字符表,注意:如使用这种方式,则sphinx会对中文进行单字切分

charset_table = 0..9, A..Z->a..z, _, a..z, U+410..U+42F->U+430..U+44F, U+430..U+44F

# 简单分词,只有0和1,需要搜索中文必须置1

ngram_len = 1

# 需要分词的字符,搜索中文时必须

= U+3000..U+2FA1F

(以上7条前如有#将其删除)

5、导入测试数据将D:\sphinx\example.sql中语句执行到test数据库中,注意:test数据库创建时需要指定为utf-8格式;

6、打开cmd窗口,进入目录D:\sphinx\bin;

7、建立索引,执行indexer.exe test1,test1即为sphinx.conf中index test1,成功。失败去配置文件中找原因

8、搜索'test',执行search.exe test  最后一句error可以忽略

9、搜索中文需要在数据库中含有中文,先修改数据库。然后重新执行第七步。然后在进行搜索“中文”。没有搜索到,因为windows命令行中的中文是GBK编码格式,所以没有匹配内容。我们可以使用PHP程序来试试。

10、进入D:\sphinx\api\目录,可以发现sphinx支持php、java、ruby调用,并提供对应的test例子,这里我们使用php来操作,首先将api复制到我们的网站根目录下,重新命名为sphinxapi目录,新建search.php,内容为:

<?php

require 'sphinxapi.php';

$s = new SphinxClient();

$s->SetServer('localhost', 9312);

$result = $s->Query('中国');

print_r($result);

echo '<br /><br />';

$result = $s->Query('中文');

print_r($result);

?>

然后回到cmd命令行中,开启sphinx服务,执行searchd.exe(这个必须要执行的),成功后在浏览器中访问search.php,进行打印出来的数据对比

11、至此sphinx在windows下的简单安装与使用就完成了。

下面是在yii框架中的使用

控制器:

//下拉选项字段 搜索值

public function actionSearch_val()

{

$set = Yii::$app->request->get('set','');//接收搜索类型

$key = Yii::$app->request->get('key','');//接收值

if(yii::$app->request->isAjax){

$key1 = '';

require ( "sphinxapi.php" );//引入类

//echo $key.$set;die;

$cl = new \SphinxClient();

$cl->SetServer ( '127.0.0.1', 9312);

$cl->SetArrayResult ( true );

if(empty($key)){

$cl->SetMatchMode ( SPH_MATCH_FULLSCAN );

}else{

$cl->SetMatchMode ( SPH_MATCH_EXTENDED2 );

if($set == 1){

$key1 = $key;

}else{

$key1 = '@'.$set.' ('.$key.')';

}

}

$res = $cl->Query ( $key1, "test2" );

if($res['total_found'] > 0){

$ids = [];

foreach ( $res['matches'] as $k => $row ) {

$ids[] = $row['id'];

}

$query = new Query();

$list = $query->from('position')->where(['in', 'id', $ids])->all();

foreach($list as $k=>$v){

$list[$k]=str_replace($key,"<font color='red'>{$key}</font>",$v);

}

} else {

$list = [];

}

Yii::$app->response->format = \yii\web\Response::FORMAT_JSON;

return ['list' => $list ];

}

return $this->render('search2');

}

视图:

<?php

use yii\helpers\Html;

use yii\helpers\Url;

?>

<form action="" method="get">

<input type="hidden" name="_csrf" value="">

<div class="col-md-1">

<select id="set">

<option value="1">全部</option>

<option value="position">职位</option>

<option value="biaoqian">标签</option>

<option value="xueli">学历</option>

</select>

</div>

<div class="col-md-3">

<input type="text" class="form-control" placeholder="keyword" id="key">

</div>

<button type="button" class="btn btn-default">Search</button>

</form>

<p>

<div id="content"></div>

<?php $this->beginBlock('index') ?>

$(function(){

$('.btn-default').click(function(){

var set = $('#set').val();

var key = $('#key').val();

var url = '<?php echo Url::toRoute(['hello/search_val'])?>';

$.getJSON(url, {'key':key, 'set':set}, function(data){

//alert(data);

console.log(data);

var lists= data.list;

//console.log(data.length)

var html = '<table class="table">';//这里用的是拼接

for(var i = 0; i < lists.length; i++ ) {

html += '<tr>';

html += '<td>'+lists[i].id+'</td>';

html += '<td>'+lists[i].position+'</td>';

html += '<td>'+lists[i].biaoqian+'</td>';

html += '<td>'+lists[i].xueli+'</td>';

html += '</tr>';

}

html += '</table>';

$('#content').html(html);

});

});

});

<?php $this->endBlock('index') ?>

<?php $this->registerJs($this->blocks['index'], \yii\web\View::POS_END);?>

转载于:https://www.cnblogs.com/liuzhen123/p/8059349.html

sphinx的使用的更多相关文章

  1. 利用sphinx为python项目生成API文档

    sphinx可以根据python的注释生成可以查找的api文档,简单记录了下步骤 1:安装 pip install -U Sphinx 2:在需要生成文档的.py文件目录下执行sphinx-apido ...

  2. 安装PHP sphinx扩展 sphinx-1.1.0/sphinx.c:105:2: error: too few arguments 错误

    表现: /home/sphinx-1.1.0/sphinx.c: In function 'php_sphinx_client_read_property':/home/sphinx-1.1.0/sp ...

  3. 【整理】Linux下中文检索引擎coreseek4安装,以及PHP使用sphinx的三种方式(sphinxapi,sphinx的php扩展,SphinxSe作为mysql存储引擎)

          一,软件准备 coreseek4.1 (包含coreseek测试版和mmseg最新版本,以及测试数据包[内置中文分词与搜索.单字切分.mysql数据源.python数据源.RT实时索引等测 ...

  4. coreseek+sphinx+mysql+thinkphp整合

    1.安装coreseek 1.1首先升级或安装系统依赖库 yum install make gcc g++ automake libtool mysql-client libmysqlclient15 ...

  5. 全文检索解决方案(lucene工具类以及sphinx相关资料)

    介绍两种全文检索的技术. 1.  lucene+ 中文分词(IK) 关于lucene的原理,在这里可以得到很好的学习. http://www.blogjava.net/zhyiwww/archive/ ...

  6. 如何将Sphinx生成的html文档集成进入Django

    参考 http://stackoverflow.com/questions/10594618/django-and-sphinx-how-to-view-the-html-sphinx-generat ...

  7. Linux下搭建coreseek(sphinx+mmseg3)全文检索

    测试平台:Center OS 1.设置环境,升级/安装系统基础依赖包:m4.autoconf.automake.libtool #设置路径和中文环境: $ export PATH=/usr/local ...

  8. debian下使用Sphinx异常“Could not import extension sphinx.builders.linkcheck (exception: cannot import name SSLError)”的解决

    最近使用到Sphinx编译文档,出现如下异常: Extension error:Could not import extension sphinx.builders.linkcheck (except ...

  9. [搜索引擎]Sphinx的介绍和原理探索

    What/Sphinx是什么 定义 Sphinx是一个全文检索引擎. 特性 索引和性能优异 易于集成SQL和XML数据源,并可使用SphinxAPI.SphinxQL或者SphinxSE搜索接口 易于 ...

  10. Sphinx安装配置应用

    Sphinx 是由俄罗斯人Andrew Aksyonoff开发的一个全文搜索引擎.意图为其他应用提供高速.地空间占用.高结果相关度的全文搜索功能.Sphinx可以非常容易的与SQL数据库和脚本语言集成 ...

随机推荐

  1. Python操作Oracle数据库:cx_Oracle

    .caret, .dropup > .btn > .caret { border-top-color: #000 !important; } .label { border: 1px so ...

  2. 安卓开发学习日记 DAY1

    1.eclipse安装,很简单 2.安卓sdk manager 下载安装 sdk manager是一个安卓开发所使用的sdk文件的管理程序,可以使用这个程序在官网上下载相应的安卓的api等.因为需要在 ...

  3. JAVA中的==和queals()的区别

    一.先来说说Java的基本数据类型和引用类型 八大基本数据类型:Byte,short,int,long,double,folat,boolean,char,其中占一个字节的是byte,short和ch ...

  4. 30.4 Map HashMap

    本文将会讲解到: Map和Collection的对比 Map接口的使用,实现类HashMap的使用 /* * 需求:实现学号和姓名这样有对应关系的数据存储 * 为了体现这种有对应关系的数据,我们使用以 ...

  5. 7.3 java 成员变量和局部变量区别

    /* * 成员变量和局部变量的区别: * A:在类中的位置不同 * 成员变量:类中,方法外 * 局部变量:方法中或者方法声明上(形式参数) * B:在内存中的位置不同 * 成员变量:堆内存 * 局部变 ...

  6. python3 进程间通信之socket.socketpair()

    python3 进程间通信之socket.socketpair() socket.socketpair()是什么鬼东西? socket.socketpair()函数仅返回两个已经连接的套接字对象,参数 ...

  7. 《MySQL实战45讲》学习笔记4——MySQL中InnoDB的索引

    索引是在存储引擎层实现的,且在 MySQL 不同存储引擎中的实现也不同,本篇文章介绍的是 MySQL 的 InnoDB 的索引. 下文将以这张表为例开展. # 创建一个主键为 id 的表,表中有字段 ...

  8. 数据结构和算法(Golang实现)(21)排序算法-插入排序

    插入排序 插入排序,一般我们指的是简单插入排序,也可以叫直接插入排序.就是说,每次把一个数插到已经排好序的数列里面形成新的排好序的数列,以此反复. 插入排序属于插入类排序算法. 除了我以外,有些人打扑 ...

  9. AJ整理问题之:内存堆栈

    内存 数据在内存中的存放 在计算机中,运行的应用程序的数据都是保存在内存中的. 不同类型的数据,保存的内存区域不同,其中包括: 1:栈区(stack)由编译器自动分配并释放,一半存放函数的参数值,局部 ...

  10. GeoGebra简单使用

    上课过程中的一些知识和一丢丢工具使用例子 1.常用的变量输入 2.好用的函数检视工具 3.使用动态的移动,关键是右键-开启跟踪 4.输入指令(推荐用英文输入,因为有提示)