sunspot ( https://github.com/sunspot/sunspot ) 经过这几年的发展,已经非常完善,在 ruby 做全文索引属于首选方案,但是原始配置不支持中文分词,我做了一个脚本,可以很方便 build 一个带 mmseg4j ( http://code.google.com/p/mmseg4j/ ) 分词算法的 solr server:
https://github.com/quake/sunspot_chinese_example
欢迎反馈。
#3 楼 @huacnlee ruby china 用的是 mongoid 吧,有现成插件的: https://github.com/jugyo/sunspot_mongoid
sunspot 封装了很多 solr 好用的功能,比方说你可以试试看用 more like this 做相关文章推荐
对比 ElasticSearch 如何?似乎 ElasticSearch 在实时性方面做得更好 ElasticSearch https://github.com/elasticsearch/elasticsearch Ruby client https://github.com/karmi/tire 对比评测 http://engineering.socialcast.com/2011/05/realtime-search-solr-vs-elasticsearch/
@Los ElasticSearch 我到时还没有用上,之前一直用 Sphinx 速度很快,就是实时搞起来很麻烦,而且编译麻烦。 Solr 我目前发现的问题是,在 Ruby China 上面搜索很慢,还一直没下心思去查原因何在,我记得开发环境用 sunspot_solr 启动那个都很快的。
#12 楼 @qichunren sunspot 里带了 solr 的 jar 包,并且 rake sunspot:solor:run 会自动导出配置文件到 solr/config
其实没必要,只要稍微简单的配置要一下 solr 下的配置文件和引入 mmseg4j 分词的 jar 即可启动带有 mmseg4j 分词器的 solr server
#37 楼 @hz_qiuyuanxin 不能用也不用连打三个感叹号吧?最近几天正好在折腾这个,楼主的脚本在 Mac 下的确需要修改后才能运行,但如果把这个脚本看作一个教程的话,没有比这个更简明实用的了,非常感谢楼主。
作为一名追新帝,我试验了一下用 Solr 4.6.0 行不行,结论是不行,因为 lucene 4.6.0 中的 TokenStream 类的 reset 方法有变动,按这个方法的文档查下去,貌似 mmseg4j 1.9.1 最高只能兼容到 Solr 4.5.1,于是我把楼主的脚本改成了 Solr 4.5.1 + mmseg4j 1.9.1 的最新版,好像能用,准备再用几天,如果没有其他问题,再作 pull request。修改后的脚本如下:
#! /bin/sh
mkdir tmp
cd tmp
wget https://github.com/sunspot/sunspot/archive/master.zip
unzip master.zip
mv sunspot-master sunspot
wget http://mmseg4j.googlecode.com/files/mmseg4j-1.9.1.zip
unzip mmseg4j-1.9.1.zip
mv mmseg4j-1.9.1 mmseg4j
cp -R sunspot/sunspot_solr/solr ../sunspot_solr_4.5.1
wget http://apache.tradebit.com/pub/lucene/solr/4.5.1/solr-4.5.1.tgz
tar vxzf solr-4.5.1.tgz
cp -f solr-4.5.1/dist/solr-4.5.1.war ../sunspot_solr_4.5.1/webapps/solr.war
cp -R solr-4.5.1/example/lib/ext ../sunspot_solr_4.5.1/lib/
cp solr-4.5.1/example/resources/log4j.properties ../sunspot_solr_4.5.1/lib/ext/
mkdir -p WEB-INF/lib
cp mmseg4j/dist/*-1.9.1.jar WEB-INF/lib
sed -ig 's,class="solr.StandardTokenizerFactory",class="com.chenlb.mmseg4j.solr.MMSegTokenizerFactory" mode="max-word",g' ../sunspot_solr_4.5.1/solr/conf/schema.xml
zip -u ../sunspot_solr_4.5.1/webapps/solr.war WEB-INF/lib/*.jar
cd ..
rm -rf tmp
echo "******************"
echo "** install done **"
echo "******************"
echo "cd sunspot_solr_4.5.1 and run 'java -jar start.jar' to start jetty"
echo "visit http://localhost:8983/solr/ to verify result"
echo "visit http://localhost:8983/solr/#/default/analysis to test"
#32 楼 @quakewang 请问在 ruby 的后台,如何调用这个接口呀(https://github.com/quake/sunspot_chinese_example )
#38 楼 @xhj6 我没用 sunspot_solr, 用这个脚本构建成功了。但是我不知道怎么把两者结合起来。网上搜索到一篇文章还说要用到bundle exec rake sunspot:solr:start
生成的 solr 文件夹里面的配置文件,不知道是否需要使用他?另外,config/sunspot.yml
production:
solr:
hostname: localhost
port: 8983
log_level: WARNING
path: /solr/production
# read_timeout: 2
# open_timeout: 0.5
development:
solr:
hostname: localhost
port: 8982
log_level: INFO
path: /solr/development
test:
solr:
hostname: localhost
port: 8981
log_level: WARNING
path: /solr/test
需要怎么配置,网上基本上都说开发环境,没有产品产品环境的案例,不吝赐教。
sunspot 和 mongoid 配合似乎有点问题,sunspot 的 module 都是加在 ActiveRecord 上的,mongoid 各种找不到