sphinx 笔记(不定期更新)

扩展语法

在sphinx的请求语法中, 有一种proximity distance的方式: 如下

"yes no"~2

在其文档中的解释为

Proximity distance is specified in words, adjusted for word count, and
applies to all words within quotes
我的理解是匹配出引号内字符之间长度在指定数值范围内的文档。 当然, 如果引号内的字符数量大于后面的数值, 那这个数值也就变得没意义了

比如上面的, yes和no之间的字符长度不能高于2,如果是三个字符

    "yes no hello"~6
    表示能匹配到的字符中包含着三个字符之间的最大长度不能超过6个。
    如果文档是中的字符为: "yes hello world you are great man no"是可以匹配到, 因为最大长度是在yes和no之间, 且长度不大于6;
    而如果文档中的字符为: "yes hello world you are great man really no"是不会被匹配到的,因为yes和no之间的长度大于6了

另一种Quorum matching operator,也是用于模糊匹配

"hello world"/0.7

前面的引号中的是要查找过滤的关键字,后面的0.7表示要匹配到的文档至少包含引号中的字符串的百分比(也可以是整数,表示要匹配到文档包含引号中的字符串的数量),比如这里的0.7,关键字是两个,所以匹配出来的文档中至少要包含1.4个引号中的字符,1.4是小数,取整应该是2个,所以要求文档中至少有两个引号中的字符。

假如你要查找的关键字有4个,希望查找到至少包含其中的3个字符的时候,可以用0.5(不包括)~~0.75这个段的百分比

mysql 方式

sphinx 可以像mysql一样去执行索引查询。

  1. 连接数据库

mysql -h0 -P9306

这里的-h表示的是sphinx服务所在的主机ip, 0即表示当前主机, -P(大写)表示sphinx服务的端口,这个端口是sphinx的mysql协议支持的端口,配置项seardchd, 配置行是:

listen = localhost:9306:mysql41

这样就可以像mysql一样查询数据了
例如:

select * from tags where match('@title "hello world"/0.5');

请注意: 这种方式查询结果默认只会显示20个,之后再执行

show meta;

就会显示这次查询相关的几个参数, 比如总共查找到的个数, 消耗的时间, 等等
如果想显示更多的结果, 像mysql一样 limit 就好了

我这里再说明一下上面查询中的match语法中的参数含义

@title 是期待使用title属性过滤(这个要在sphinx的索引配置中指定sql_field_string);
后面跟着的请看上面的Quorum matching operator

这个其实可以放到上面的扩展语法里,暂时写在这里

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值