sphinx的使用
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的使用的更多相关文章
- 利用sphinx为python项目生成API文档
sphinx可以根据python的注释生成可以查找的api文档,简单记录了下步骤 1:安装 pip install -U Sphinx 2:在需要生成文档的.py文件目录下执行sphinx-apido ...
- 安装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 ...
- 【整理】Linux下中文检索引擎coreseek4安装,以及PHP使用sphinx的三种方式(sphinxapi,sphinx的php扩展,SphinxSe作为mysql存储引擎)
一,软件准备 coreseek4.1 (包含coreseek测试版和mmseg最新版本,以及测试数据包[内置中文分词与搜索.单字切分.mysql数据源.python数据源.RT实时索引等测 ...
- coreseek+sphinx+mysql+thinkphp整合
1.安装coreseek 1.1首先升级或安装系统依赖库 yum install make gcc g++ automake libtool mysql-client libmysqlclient15 ...
- 全文检索解决方案(lucene工具类以及sphinx相关资料)
介绍两种全文检索的技术. 1. lucene+ 中文分词(IK) 关于lucene的原理,在这里可以得到很好的学习. http://www.blogjava.net/zhyiwww/archive/ ...
- 如何将Sphinx生成的html文档集成进入Django
参考 http://stackoverflow.com/questions/10594618/django-and-sphinx-how-to-view-the-html-sphinx-generat ...
- Linux下搭建coreseek(sphinx+mmseg3)全文检索
测试平台:Center OS 1.设置环境,升级/安装系统基础依赖包:m4.autoconf.automake.libtool #设置路径和中文环境: $ export PATH=/usr/local ...
- 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 ...
- [搜索引擎]Sphinx的介绍和原理探索
What/Sphinx是什么 定义 Sphinx是一个全文检索引擎. 特性 索引和性能优异 易于集成SQL和XML数据源,并可使用SphinxAPI.SphinxQL或者SphinxSE搜索接口 易于 ...
- Sphinx安装配置应用
Sphinx 是由俄罗斯人Andrew Aksyonoff开发的一个全文搜索引擎.意图为其他应用提供高速.地空间占用.高结果相关度的全文搜索功能.Sphinx可以非常容易的与SQL数据库和脚本语言集成 ...
随机推荐
- ELK数据批量导入
数据批量导入 • 使用 _bulk 批量导入数据 – 批 ...
- Shell:Day09-2.笔记
4.模式匹配(地址定界) 1.空值,没有定义,默认就将文件中所有的行,放入awk进行循环 2.对固定的 1,3 行进行操作 sed -n '1,3p' /etc/passwd awk '1,3 ...
- scratch中如何实现面向鼠标指针的相反方向?
你可以试试设置面向鼠标指针,然后再角色进行翻转,而且要是面向反方向的话,鼠标指针是自己可以调节的,面向指针也可以的 scratch学习视频 链接:https://pan.baidu.com/s/1qX ...
- 总结关于Mac上使用MySQL一些常见的问题
Num 1. MySQL5.7导出数据时提示--secure-file-priv解决办法: 问题分析 在官方的文档中,对secure_file_priv进行了说明,它用于限制数据的导出. secur ...
- easy-mock 本地部署(挤需体验三番钟,里造会干我一样,爱象节款mock)
前言 很多小伙伴问我怎么在自己公司的项目里面添加配置mock,在vue项目里面都知道怎么配置mock,在大型前端项目里面就一脸疑惑了. 我就回答他,你今天会在vue项目里面用,那天换公司是用angul ...
- Js异步机制的实现
Js异步机制 JavaScript是一门单线程语言,所谓单线程,就是指一次只能完成一件任务,如果有多个任务,就必须排队,前面一个任务完成,再执行后面一个任务,以此类推.这种模式的好处是实现起来比较简单 ...
- leetcode c++做题思路和题解(2)——链表的例题和总结
链表的例题和总结 0. 目录 环形链表 1. 环形链表 题目: https://leetcode-cn.com/problems/linked-list-cycle/ 看了别人的思路真是感概万千,思路 ...
- 自己总结 :并发队列ConcurrentLinkedQueue、阻塞队列AraayBlockingQueue、阻塞队列LinkedBlockingQueue 区别 和 使用场景总结
并发队列ConcurrentLinkedQueue.阻塞队列AraayBlockingQueue.阻塞队列LinkedBlockingQueue 区别 和 使用场景总结 分类: Java2013-0 ...
- AJ学IOS(29)UI之Quartz2D自定义下载控件_画各种图形
AJ分享,必须精品 效果 自定义控件过程 主要过程在上一篇里有介绍了,这里主要介绍下代码实现 先做好要放的view 然后实现呢主要就是四步: 1:获取上下文 2:拼接路径 3:把路径添加到上下文. 4 ...
- 安卓menu的介绍与使用
菜单之前是用户点击系统的菜单键才展示出来的,后来这个键渐渐被移除,菜单变成了点击任意的view都可以展示.菜单非为3种: 1.Options menu and action bar 选项菜单和操作栏 ...