2

将 Elasticsearch 与 Rails 3 和轮胎宝石一起使用。

我在几个领域都有工作,但我现在有一个特殊要求,不确定是否可行。我的模型项目中有两个字段都存储相同的值:Country1 和 Country2

用户最多可以为一个项目存储两个国家/地区。两者的下拉菜单相同。两个字段都不是必需的。

我想要的是一个单一的方面,它“合并”来自 Country1 和 Country2 的值​​,并会智能地处理点击这些方面(即无论是在 1 还是在 2 中都会找到它)

到目前为止,这是我的模型:(注意 Country1/2 可以是多个单词)

class Project < ActiveRecord::Base
  mapping do
    indexes :id
    indexes :title, :boost => 100
    indexes :subtitle
    indexes :country1, :type => 'string', :index => 'not_analyzed'
    indexes :country2, :type => 'string', :index => 'not_analyzed'
  end
  def self.search(params)
    tire.search(load: true, page: params[:page], per_page: 10) do
    query do
      boolean do
        must { string params[:query], default_operator: "AND" } if params[:query].present?
        must { term :country1, params[:country] } if params[:country].present?
      end
    end
    sort { by :display_type, "desc" }
    facet "country" do
      terms :country1
    end

  end
end

非常感谢任何提示!

4

3 回答 3

6

Tyre 中的此提交https://github.com/karmi/tire/commit/730813f支持在“术语”方面聚合多个字段。

界面是:

Tire.search('articles-test') do
  query { string 'foo' }
  # Pass fields as an array, not string
  facet('multi') { terms ['bar', 'baz'] }
end
于 2012-07-25T10:51:23.327 回答
0

根据术语方面的弹性搜索文档http://www.elasticsearch.org/guide/reference/api/search/facets/terms-facet.html,这应该是可能的:

多领域:

术语 facet 可以针对多个字段执行,返回这些字段的聚合结果。例如:

{
    "query" : {
        "match_all" : {  }
    },
    "facets" : {
        "tag" : {
            "terms" : {
                "fields" : ["tag1", "tag2"],
                "size" : 10
            }
        }
    }
}

您是否尝试为术语 facet 提供一系列字段terms :country1, :country2

于 2012-06-06T23:50:37.460 回答
0

这似乎可行,但我需要对其进行更多测试: facet('country') { terms fields: [:country1, :country2]}

于 2012-07-14T13:47:14.160 回答