php sphinx 搜索 多表联查速度怎么样

 我来答
YQ努力吧
2017-03-21 · 超过119用户采纳过TA的回答
知道答主
回答量:460
采纳率:0%
帮助的人:93.1万
展开全部
使用Elasticsearch和solr一样,使用lucene
这个和php无关,因为无论哪个工具,都是通过网络接口查询,所以我不回答有关是否适合php的情况~~

## ES 缺点
基于java,会有一些java的常见问题需要注意,比如gc
单纯执行速度上比C写的sphinx慢

## sphinx 优点
纯粹,没有什么花哨的其他功能
C写的,速度快
新版本加了分布式、动态更新索引等功能

## 下面列举Es比sphinx优秀的部分
1、部署简单,虽然sphinx部署也挺简单,但是在书写配置的时候,你会发现,sphinx的配置是要写好后,重启sphinx,而Elasticsearch针对某个索引的配置,是可以动态写入的。
2、调试简单,sphinx有命令行工具可以调试,而Elasticsearch使用的是http接口进行调试,不需要专门的API类,几行php代码就可以写一个Elasticsearch的API。
3、可视化工具比较多,有收费的,也有的,比如kibana head marvel。
4、提供结构化的JSON查询语句,易读性强
5、Es可以保留源数据(可选),也就是说,你可以不需要mysql的支持,就可以完成整个搜索过程,即使你不需要这个功能,在调试的时候,还是让人感到非常便利,不用将查询结果到数据库匹配一下。
6、Es可以动态更新全文索引,动态更新单个记录,而不像sphinx一样需要重建全部
7、对UTF8的支持是不需要单独配置的

## 从中文分词上来说
首先我觉得分词最重要的基本都是词库,分词算法两个工具基本都可以使用。
lucene 支持很多分词工具,比如
word
比如ik
这两个工具最近都很活跃,因为Es更新2.0 和 2.1

比较分词区别(sphinx可能有误):
sphinx分词 我不太熟悉它的机制,多数情况下我使用scws分词,发送给sphinx,然后设置匹配规则,比如最大匹配(我基本都是基于模糊匹配在用sphinx)

Es的全文索引是基于分词的,也就是事先分好词,每个词对应某些记录,自动进行TF/IDF的运算,得到一个评分后返回,当然这个评分可以改(sphinx同样支持修改评分),这种检索方式肯定更快,但是受到分词限制,所以我每个字也分词,然而这样可能影响分数判断。

另一方面ES也支持类似sphinx的匹配方式,叫做fuzzy,模糊匹配,一般会一起使用,一个词不在分词库中的时候,就用fuzzy,所以Es在功能上,应该和sphinx不会有太多差别,而且应该要更多。

## 个人方面
我在使用shpinx的时候,会查3次,一次完全按照用户输入的查(如果用户没有输入空格),一次按照空格分开查或者分词系统分词结果查,一次按照单个字来查(前提是前面两个结果太少)。

在用Es的时候,如果没有办法正确分词,会按照fuzzy + 单字查(可以同时进行),如果有办法分词,按照分词结果 + 单字查(可以同时)

## 后期维护上:
sphinx的配置文件在mysql分表之后,维护起来是比较麻烦的,你可以用php脚本当做配置文件,这样会好很多。
Es的索引是可以主动发给它去建立的(通过http接口),分表之后,它不关心数据库状态和结构。新增字段可以热更新。

## 扩展性上:
Es和sphinx都支持分布式索引,扩展性都没有问题
两者都支持别名,Es的别名加上动态建立索引,使得更换索引结构或者重建索引后,支持0宕机时间。而sphinx的rotate选项可以动态更新索引(不知道能不能动态创建索引,因为sphinx我在使用的时候,索引都要求写在配置文件里。
性能方面没有测试数据。从直观感受上sphinx要快一些。
柚鸥ASO
2024-03-16 广告
「柚鸥ASO」在ASO这块就做的蛮不错的,一直专注于应用商店优化,因为专注所以专业;专注应用商店下载量优化、评分优化、关键词排名优化、关键词覆盖、产品权重提升等等整体方案优化服务柚鸥网络-全球ASO优化服务商专注ASO优化已11年!(效果说... 点击进入详情页
本回答由柚鸥ASO提供
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式