2012-03-04 79 views
12

大型Web应用程序搜索提供了一个“全球性”的搜索,从各种指标全文结合数据(这将是SQL表),以提供其分值排序组合的搜索结果。因此,可以说,你有视频,博客文章和用户,那么当你输入“家”到搜索可能产生这样的结果(按分数排序):多指数ElasticSearch(轮胎)

  • 我家(博客文章)
  • 家乡(用户)
  • 我想回家(视频)

有谁知道如何使用ElasticSearch执行这样的组合搜索?最好使用Rails的Tire gem,但原始的ElasticSearch JSON数据也可以工作。

谢谢。

回答

16

关于轮胎,有一个重要的区别:你使用它单机或在ActiveRecord的/集成加载ActiveModel。

在前一种情况下,只是对搜索多个索引,Tire.search ['indexA', 'indexB'] do ... end。或者搜索整个群集,Tire.search do ... end(相当于curl 'http://localhost:9200/_search?q=*')。

在后一种情况下,轮胎目前不能很好地处理多模型搜索。注意这个拉取请求:https://github.com/karmi/tire/pull/218 - 使用此修补程序构建您的宝石,并帮助测试解决方案。

UPDATE

电流轮胎(> 0.4)可以加载多个模型实例就好了。例如,请参阅integration test

+1

直接从宝石所有者回复:)非常感谢! 是的,我正在使用它与ActiveRecord。在最坏的情况下,我将只设置:load => false,以便它不会产生任何ActiveRecord对象。 – matsko 2012-03-06 15:32:32

+0

是的,在没有':load'的情况下,您将返回“弹性”模型“Tire :: Results :: Item”实例。但是,多模型搜索是我们应该支持的,我喜欢#218的补丁。 – karmi 2012-03-07 07:56:18

1

我敢肯定的是,http://127.0.0.1:9200/_search端点会做的伎俩为您服务。我的数据超过99%都在一个索引中,所以我很难在这里为您验证。

此外,检查出的多搜索端点:http://www.elasticsearch.org/guide/reference/api/multi-search.html

+0

什么是从把大部分数据到一个单一的ES指数的好处/缺点?搜索绝对更容易,更简单,但有什么缺点? – raffian 2013-06-21 15:00:41

+0

有时只有一个单一索引是不可行的。有时你只是预先错误地计算了碎片数量,创建一个新索引要比将所有东西再次索引到另一个索引更快。 – 2013-12-22 02:02:11