like不能索引,但模糊搜索是非常有必要的,比如搜索2ex,你想结果中会包含v2ex,这比较符合需求是吧。
现在尝试了几个,mysql-ftppc , sphinx 等。无果,主要还是词库不行。比如sphinx for chinese,词库没办法实现复合分词,意味着,搜索 特别申明 有结果,单独搜索 申明 没结果的尴尬。这彻底打消了我想加入智能学习的方案,来对词库进行增量。
P.S 有人吐槽,你不会直接用coreseek啊!不能用,不要问原因。
数据库是mysql,条目大概4w。算小型应用,如果不丢失模糊搜索,又能顺利索引呢?查阅了一些文章,说是建立反向索引+缓存,索引词,连续词,以及句子。然后缓存热门。
搞了几天了。技术和运维也头大了。
实在搞不定,我也只能砸硬件了。不研究这玩意了。主要也是实验性质,为以后项目策略留个备胎,涨点经验。真心不想遇到事情就硬件升级,说真的,无非就是增加一台mysql读而已。但技术不会有太大进步。嘛,我有点太考虑远期目标了。
话说aws的cloudsearch是虾米玩意?这东西是所谓的云搜索?让第三方托管?这延迟。。。说是堪称毫秒级别的,不过走外网的吧。这玩意能有多少实用性?
1
aszxqw 2015-02-13 20:48:56 +08:00
为什么搜索2ex结果就得出来v2ex?
如果真的需求是这样的话,就搞个同义词词典呗。 |
2
binux 2015-02-13 20:49:04 +08:00
『比如搜索2ex,你想结果中会包含v2ex,这比较符合需求是吧』
不是吧 |
3
aszxqw 2015-02-13 20:49:16 +08:00
至少我百度2ex了没出来v2ex
|
4
ota OP |
6
ota OP @decken 比如搜索 建的更
百度似乎结果更本地化,但并不一定是要的结果,比如 “建设 建设得 建设+更加” 很多不是连续性的。 谷歌对这类片段的没啥意义的词似乎倾向于作为单个分词处理,搜索结果更多的是“建的更”,时不时还发现有“bigram”类型的,“建的 and 的更”,多数也比较符合要求。感觉谷歌更贴切想要的结果。 |
7
firldlove 2015-02-13 22:16:50 +08:00 via iPad
Elasticsearch非常好用
|
8
xi4oh4o 2015-02-13 22:55:47 +08:00
coreseek 为什么不能用呢?
Elastisearch + jdbc river + ik |
9
em70 2015-02-13 23:34:28 +08:00 via Android
才4W,用like有多大问题
|
10
ota OP @em70 不光是只有4w,而且机器用的是1650 v3 ddr4 ssd s3700
问题就是搜索非常频繁。流量很大,虽然站小库也小。 |
11
em70 2015-02-14 07:33:01 +08:00 via Android
@ota 测试过吗,like需要多长时间,搜索关键词集中吗,如果很集中加缓存就行了。
你得分析一下需求,这种2ex搜索v2ex的场景是否频繁发生?如果只是极端案例,可以用MySQL全文索引,先match搜索,如果搜索不到再用like,并缓存 |
12
sunsol 2015-02-14 08:26:13 +08:00
条目才4w,直接grep就行了。
|
13
sunsol 2015-02-14 08:29:55 +08:00
如果条目经常更新同时担心效率的话,就用sqlite装载为内存数据库,直接用like简单粗暴。
|