sphinx(七)sphinx匹配模式

简介: Sphinx匹配模式语法: $sp -> SetMatchMode(常量)SPH_MATCH_ALL 匹配所有词(默认)SPH_MATCH_ANY 匹配一个词SPH_MATCH_PHRASE 匹配整一个词SPH_MATCH_BOOLEAN 将查询看作一个布尔表达式SPH_MATCH_EXTENDED 查询看做一个sphinx的表达式

QQ图片20220425162927.jpg

Sphinx匹配模式


语法: $sp -> SetMatchMode(常量)


SPH_MATCH_ALL            匹配所有词(默认)
SPH_MATCH_ANY            匹配一个词
SPH_MATCH_PHRASE     匹配整一个词
SPH_MATCH_BOOLEAN   将查询看作一个布尔表达式
SPH_MATCH_EXTENDED  查询看做一个sphinx的表达式


举例: 我喜欢PHP


分词: 我 喜欢 PHP


准备工作: 先停止服务-> 创建索引->启动服务


1:匹配所有词(SPH_MATCH_ALL)


说明:我 喜欢 PHP 字段都要存在, 位置不限


<?php
#步骤1:引入sphinx接口文件
require './sphinxapi.php';
#步骤2:实例化对象
$sp = new SphinxClient;
#步骤3:设置服务
$sp->SetServer('localhost', 9312);
#步骤4:设置匹配模式
$sp->SetMatchMode(SPH_MATCH_ALL);
#步骤5:设置查询条数
$sp->SetLimits(0, 5000);
#步骤6:发送查询
$rs = $sp->query('我喜欢PHP', 'music');
echo '<pre>';
print_r($rs); #


2:匹配一个词(SPH_MATCH_ANY)


说明: 我 喜欢 PHP 只要有一个存在,就匹配


#步骤4:设置匹配模式
$sp->SetMatchMode(SPH_MATCH_ANY);


3:匹配整个词(SPH_MATCH_PHRASE)


说明: 我 喜欢 PHP 都必须存在 位置必须一致


#步骤4:设置匹配模式
$sp->SetMatchMode(SPH_MATCH_PHRASE);


4:将查询看作一个布尔表达式(SPH_MATCH_BOOLEAN)


#步骤4:设置匹配模式
$sp->SetMatchMode(SPH_MATCH_BOOLEAN);


5:查询看做一个sphinx的表达式(SPH_MATCH_EXTENDED)


说明: 查询指定字段的内容 @字段 内容


举例: @title 内容 @content 内容 @author 内容


#步骤4:设置匹配模式
$sp->SetMatchMode(SPH_MATCH_EXTENDED);
#步骤5:设置查询条数
$sp->SetLimits(0, 5000);
#步骤6:发送查询
$rs = $sp->query('@content PHP @author 校长'); #内容=PHP并作者=校长
echo '<pre>';
print_r($rs); #


这里需要注意一下:


官方的sphinxapi.php中设置查询模式的代码如下所示:


/// set matching mode
    function SetMatchMode ( $mode )
{
// trigger_error 应该注释,否则访问即报错
        trigger_error ( 'DEPRECATED: Do not call this method or, even better, use SphinxQL instead of an API', E_USER_DEPRECATED );
        assert ( $mode==SPH_MATCH_ALL
            || $mode==SPH_MATCH_ANY
            || $mode==SPH_MATCH_PHRASE
            || $mode==SPH_MATCH_BOOLEAN
            || $mode==SPH_MATCH_EXTENDED
            || $mode==SPH_MATCH_FULLSCAN
            || $mode==SPH_MATCH_EXTENDED2 );
        $this->_mode = $mode;
    }


我们需要将trigger_error这行代码注释。否则访问就报错。


这里大概解释一下相关操作符的使用方法:


操作符OR:hello | world,区配含有hello或world


操作符NOT:hello -world或hello !world,区配包含hello,且不包含world


字段搜索操作符:@title hello @body world,匹配title中有hello及body中有world


字段限位修饰符:@title[5] hello ,匹配title字段前5个词中包含有hello


多字段搜索符:@(title,body) hello,匹配title或body包含有hello


全字段搜索符:@* hello,区配任何一列包含有hello


阀值匹配符:"this is test document number"/3,匹配至少包含有3个词


短语(phrase)搜索符:“hello world”


临近(proximity)搜索符:“hello world”~10,匹配hello与world之间小于10个词


严格有序搜索符:aaa<<bbb<<ccc,匹配aaa,bbb,ccc按顺序出现


字段开始和字段结束修饰符:^hello world$,匹配以hello开始,world为结尾



目录
相关文章
|
4月前
|
API Python
|
SQL 存储 自然语言处理
sphinx(一)全文检索引擎sphinx
Sphinx是一个基于SQL的全文检索引擎,可以结合MySQL,PostgreSQL做全文搜索,它可以提供比数据库本身更专业的搜索功能,使得应用 程序更容易实现专业化的全文检索。Sphinx特别为一些脚本语言设计搜索API接口,如PHP,Python,Perl,Ruby等,同时为MySQL 也设计了一个存储引擎插件。
665 0
sphinx(一)全文检索引擎sphinx
|
JavaScript
[✔️]cmake command 无法使用通配符匹配文件,只能检索下目录指定文件
[✔️]cmake command 无法使用通配符匹配文件,只能检索下目录指定文件
235 0
|
搜索推荐 关系型数据库 数据库
使用sphinx search打造你自己的中文搜索引擎
Google搜索引擎建立至今已经快20年了,之后全球各类大大小小类似的搜索引擎也陆续出现、消亡。国内目前以百度为大,搜狗、360、必应等也势在必争。搜索引擎技术也发展的相当成熟,同时也就出现了很多开源的搜索引擎系统。
3188 0
|
自然语言处理 关系型数据库 MySQL
php sphinx 全文检索 中文分词
php sphinx 全文检索 中文分词
172 0
|
搜索推荐 数据库 索引
sphinx(八)sphinx增量索引
主索引的更新频率可以设置的长一些(例如设置在每天的凌晨进行),而增量索引的更新频率,我们可以将时间设置的很短(几分钟左右),这样在用户搜索的时候,我们可以同时查询这两个索引的数据。 使用“主索引+增量索引”方法有个简单的实现,在数据库中增加一个计数表,记录每次重新构建主索引时,被索引表的最后一个数据id,这样在增量索引时只需要索引这个id以后的数据即可,每次重新构建主索引时都更新这个表。
237 0
sphinx(八)sphinx增量索引
|
索引
sphinx(六)sphinx 配置文件sphinx.conf配置项全解析
source:数据源,数据是从什么地方来的。 index:索引,当有数据源之后,从数据源处构建索引。索引实际上就是相当于一个字典检索。有了整本字典内容以后,才会有字典检索。 searchd:提供搜索查询服务。它一般是以deamon的形式运行在后台的。 indexer:构建索引的服务。当要重新构建索引的时候,就是调用indexer这个命令。
312 0
sphinx(六)sphinx 配置文件sphinx.conf配置项全解析
|
jenkins Linux 持续交付
sphinx(五)php执行sphinx更新索引rotate命令
选择在更新数据的时候更新索引,这样做是为了保证数据检索的实时性,但是如果您的数据需要比较频繁的更新且数据量比较大,并且对数据检索没有实时性的要求,那么可以使用linux的定时任务,在使用人数较少的时候来更新索引,
135 0
sphinx(五)php执行sphinx更新索引rotate命令
|
关系型数据库 MySQL 测试技术
|
关系型数据库 MySQL PHP