ruby-on-rails - Elastic Search 与 Sunspot 的功能比较

标签 ruby-on-rails ruby-on-rails-3 ruby-on-rails-3.1 solr elasticsearch

找不到任何与 sunspot (Solr) 和 Elastic Search (Lucene) 相关的比较问题 这两个搜索引擎的优缺点是什么?

我看到其他 VS 问题可以在 2 个 gem 的比较中获得更好的内部信息,所以希望这可以让新手(像我一样)更好地了解这两个引擎。我已经看过太阳黑子了,但有一些问题。所以我搜索了

对比

最佳答案

我开始从事一个需要在 Ruby 中进行全文搜索的项目,所以很自然地我开始使用 Solr + Sunspot,但我无法让它工作。只是让它们连接起来很痛苦,然后试图弄清楚文档索引是否正确,弄清楚运行时类路径,这样我就可以添加额外的分析器/标记器类,编辑 config.xml/schema.xml 等。Solr numDocs 清楚说它收到并为它们编制了索引,但我无法获得任何查询结果。几天后我就放弃了,这有点像配置 hell 。

ElasticSearch + Tire 的启动和运行轻而易举,我在一个小时内就开始工作了。

Lucene 只是一个 Java 搜索库,因此 Solr 被开发成一个提供全面服务的搜索应用程序,但 Solr 仍然具有典型 Java web 应用程序的所有陷阱:过于复杂的 XML 配置、大量模式、期望 XML 文档用于索引,需要一个 Java servlet 容器(Jetty 或 Tomcat),这对我来说已经成为太多的故障点。

ElasticSearch 也基于 Lucene,它有一个内置的 servlet 容器,因此就像守护进程一样运行,使用非常直接的 JSON + REST API,因此它非常适合测试并且更适合 Ruby。它是无模式的,甚至无需编辑配置文件就可以为我工作。一切都很顺利。

我真正需要的是中文搜索,而 ElasticSearch 已经将 Luecene 的 SmartChineseAnalyzer 打包为一个插件。如果您需要那种级别的定制,不确定定制分析器/分词器链会有多困难。 ElasticSearch 和 Tire 的文档都是一流的。

Tire(用于 ElasticSearch 的 Ruby 库)

https://github.com/karmi/tire

您可以试用该演示,它会安装一个 Rails 搜索应用程序,下载 ElasticSearch 二进制文件并运行它,然后自动启动 Webrick。

$ rails new searchapp -m https://raw.github.com/karmi/tire/master/examples/rails-application-template.rb

在我的系统上,它提示没有 Javascript 引擎(Rails 3.2?默认情况下不再包含 thereubyracer gem),所以我不得不:

$ wget https://raw.github.com/karmi/tire/master/examples/rails-application-template.rb
$ nano rails-application-template.rb

在文件中添加 gem 'therubyracer'(查找 gem 'tire' 和 gem 'will_paginate'),然后...

$ rails new searchapp -m rails-application-template.rb

为了开发我自己的应用程序,我只是下载了 ElasticSearch tarball 并使用 -f 开关在前台运行(这样我可以通过 Ctrl-C 轻松停止它)

$ bin/elasticsearch -f

您可以安装 eleasticsearch-head 插件来获取 Web 管理界面

https://github.com/mobz/elasticsearch-head

我还发现了一些事情:如果您有一对多关系模型,Tire 不会在搜索结果中为您解析它们,它只会返回一个平面集合。您的 has_many 和 belongs_to 关系只是集合中的对象 ID,而不是完整的对象。

关于ruby-on-rails - Elastic Search 与 Sunspot 的功能比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9160305/

相关文章:

ruby-on-rails - Ruby:返回值或 nil

ruby-on-rails-3 - 在 Rails 3 中编写自定义验证器

ruby-on-rails - 使用偏执狂的默认范围急切加载已删除的记录

ruby-on-rails - 如何初始化 'attr_accessor'属性值?

ruby-on-rails - 使用户可以通过 Web 表单访问应用程序范围的设置

ruby-on-rails - 表单参数未正确散列

ruby-on-rails - Hartl Rails 教程的 Users#index 中的 ArgumentError

ruby-on-rails - 实现一个Facebook样式的消息传递系统,其中用户可以位于另一个模型的两个不同列中的任意一个中

javascript - 如何将原型(prototype)类声明更改为 jquery?

ruby-on-rails - ActionView::Template::Error(nil:NilClass 的未定义方法 `city'):