【问题标题】:Multi-index Searching in ElasticSearch (Tire)ElasticSearch(轮胎)中的多索引搜索
【发布时间】:2012-03-22 09:23:34
【问题描述】:

大型 Web 应用程序提供“全局”搜索,它结合来自各种全文索引(这将是 SQL 中的表)的数据,以提供按其分数排序的组合搜索结果。因此,假设您有视频、博客文章和用户,那么当您在搜索中输入“家”时,它可能会产生如下结果(按分数排序):

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

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

谢谢。

【问题讨论】:

    标签: json full-text-search elasticsearch


    【解决方案1】:

    关于轮胎,有一个重要的区别:您是单独使用它还是在 ActiveRecord/ActiveModel 集成中使用它。

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

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

    更新

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

    【讨论】:

    • 宝石所有者的直接回复 :) 非常感谢!是的,我将它与 ActiveRecord 一起使用。在最坏的情况下,我将设置 :load => false 以便它不会产生任何 ActiveRecord 对象。
    • 是的,没有:load,您将获得“弹性”模型,Tire::Results::Item 实例。但是,我们应该支持多模型搜索,我喜欢 issue #218 中的补丁。
    【解决方案2】:

    我很确定http://127.0.0.1:9200/_search 端点会为您解决问题。我 99% 以上的数据都在一个索引中,所以我很难在这里为您验证这一点。

    另外,查看多搜索端点:http://www.elasticsearch.org/guide/reference/api/multi-search.html

    【讨论】:

    • 将大部分数据放入单个 ES 索引有什么好处/缺点?搜索肯定更容易,更简单,但有什么缺点吗?
    • 有时只有 1 个单一索引是不可行的。有时您只是预先错误地计算了分片数,创建新索引比将所有内容重新索引到另一个索引更快。
    猜你喜欢
    • 2012-10-19
    • 1970-01-01
    • 2012-06-30
    • 2015-04-21
    • 1970-01-01
    • 1970-01-01
    • 2013-06-27
    • 2012-03-24
    • 2012-06-08
    相关资源
    最近更新 更多