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

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

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

https://github.com/quake/sunspot_chinese_example

欢迎反馈.

共收到 45 条回复
De6df3

Sunspot 可以用于 MongoDB 么?

162

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

De6df3

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

147

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

162

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

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

96

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

34

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

De6df3

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

96

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

F46600

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

96

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

F46600

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

39

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

De6df3

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

De6df3

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

De6df3

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

186

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

39

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

De6df3

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

39

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

De6df3

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

1243

话说, 没人用xapian么?

39

#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

39

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

96

推荐Sphinx

De6df3

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

8

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

162

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

1924

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

96

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

2369

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

96

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

2099

楼主的脚本不能用!!!

96

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

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

2099

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

7128

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

96

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

9442

#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

需要怎么配置,网上基本上都说开发环境,没有产品产品环境的案例,不吝赐教。

11577

sunspot和mongoid配合似乎有点问题,sunspot的module都是加在ActiveRecord上的,mongoid各种找不到

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