分享 做了一个脚本,方便大家用 Sunpot 做中文全文索引

quakewang · 2011年12月02日 · 最后由 sickate 回复于 2014年10月30日 · 12554 次阅读

sunspot ( https://github.com/sunspot/sunspot ) 经过这几年的发展,已经非常完善,在 ruby 做全文索引属于首选方案,但是原始配置不支持中文分词,我做了一个脚本,可以很方便 build 一个带 mmseg4j ( http://code.google.com/p/mmseg4j/ ) 分词算法的 solr server:

https://github.com/quake/sunspot_chinese_example

欢迎反馈。

Sunspot 可以用于 MongoDB 么?

#1 楼 @huacnlee 可以,sunspot 是基于 ruby 而不是 rails 的插件,rails 的 activerecord 插件是在它基础上简单封装了一把

再 ruby-china 里面搞搞试试,之前一直不太喜欢用带 Java 环境的

正需要这种插件,之前因为懒得装 java,所以全文搜索一直很原始的用正则匹配。。

#3 楼 @huacnlee ruby china 用的是 mongoid 吧,有现成插件的: https://github.com/jugyo/sunspot_mongoid

sunspot 封装了很多 solr 好用的功能,比方说你可以试试看用 more like this 做相关文章推荐

#1 楼 @huacnlee 你的全文检索不是用的你自己写的基于 redis 的么?

#6 楼 @soloara 那个只适用于小型文本,不适合大的全文检索的

是的,redis-search 不能用于大文本那种场景

#8 楼 @huacnlee 请问你以前的 ruby china 用的全文检索 redis-search 怎么用?我现在用 solr 执行不起来,希望你能写个教程,谢谢

请教一下,sunspot 与 Solr 有什么关系啊?

匿名 #11 2012年04月18日

#10 楼 @qichunren sunspot 应该是 solr 的 ruby 封装,包括运行环境都封装了

#11 楼 @bl0ckme “包括运行环境都封装了”?重写 Solr?因为没有安装 solr,sunspot 都可以运行,所以我有些迷糊了。

对比 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/

#13 楼 @Los Sunspot 实时性也很好啊

@Los ElasticSearch 我到时还没有用上,之前一直用 Sphinx 速度很快,就是实时搞起来很麻烦,而且编译麻烦。 Solr 我目前发现的问题是,在 Ruby China 上面搜索很慢,还一直没下心思去查原因何在,我记得开发环境用 sunspot_solr 启动那个都很快的。

#9 楼 @yetone redis-search 适用的场景是这种:

#12 楼 @qichunren sunspot 里带了 solr 的 jar 包,并且 rake sunspot:solor:run 会自动导出配置文件到 solr/config

#16 楼 @huacnlee 一直对 Java 的一大坨东西不习惯,没怎么用过 Solr -∠-

@Los 现在 Ruby China 后台进程占用内存最多的就是 Solr ... 不过平心而论,还是挺好的,只是配置文件 XML 太鹾了

#20 楼 @huacnlee 刚刚对 ElasticSearch 感兴趣,其中一个点就是它的配置文件是用 yml 的

#21 楼 @Los 安装容易么?之前 Sphinx 编译搞得很郁闷

话说,没人用 xapian 么?

#22 楼 @huacnlee mac os x 下就只需要运行 brew install elasticsearch 其他环境我还没尝试过,但看它安装说明很简单

$ curl -k -L -o elasticsearch-0.19.0.tar.gz http://github.com/downloads/elasticsearch/elasticsearch/elasticsearch-0.19.0.tar.gz
$ tar -zxvf elasticsearch-0.19.0.tar.gz
$ ./elasticsearch-0.19.0/bin/elasticsearch -f

#20 楼 @huacnlee 现在 Ruby China 后台进程 Solr 占用内存多少?

推荐 Sphinx

#29 楼 @ruby_sky 这个就不开源啦

这个只能在 sunspot_solr_mmseg4j 目录启动么 在其他路径启动会报错。

#31 楼 @hooopo 你可以将 build 好的 sunspot_solr_mmseg4j 目录移动到任意地方,只要在这个目录下执行 java -jar start.jar 就可以了

其实没必要,只要稍微简单的配置要一下 solr 下的配置文件和引入 mmseg4j 分词的 jar 即可启动带有 mmseg4j 分词器的 solr server

@uudui 怎么‘简单’的配 solr/conf下面有一大推配置文件 mmseg4j 我也下好了

@uudui 我也想 bump 一下这个问题

高人啊,这个功能我搞了好久啊,磕磕碰碰的总是出问题,

楼主的脚本不能用!!!

#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"

#38 楼 @xhj6 哈哈,别介意,我试一下 😊

#38 楼 @xhj6 我还想问下,如果是在 Rails App 里,mmseg4j 的三个文件要放哪里?我在 solrconfig.xml 里面加了,但是也还是说加载失败之类的!!

#32 楼 @quakewang 请问在 ruby 的后台,如何调用这个接口呀(https://github.com/quake/sunspot_chinese_example

#38 楼 @xhj6 尝试照着您的脚本,成功配置了 solr-4.5.1,然后想尝试配置 solr 4.9 + mmseg4j 2.2.0, Solr 的 dashboard 能跑起来,但会出现 SolrCore Initialization Failure,想请教下遇到这个问题如何解决。

#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 各种找不到

需要 登录 后方可回复, 如果你还没有账号请 注册新账号