【问题标题】:Elasticsearch facet value for an id fieldid 字段的 Elasticsearch facet 值
【发布时间】:2012-09-12 23:41:23
【问题描述】:

我在带有轮胎的轨道上使用弹性搜索。

我的代码:

def to_indexed_json
    {
      :id                 => id,  
      :brand_name         => brand_name,
      :brand_id           => brand_id
    }.to_json
end

facet "brands" do
  terms :brand_id
end

我必须查询数据库以检索 elasticsearch 返回的所有品牌的名称。有没有办法从 elasticsearch 返回这些值(brand_name)?

【问题讨论】:

  • 为什么你的 facet 是brand_id 而不是brand_name?那不是可以解决你的问题吗?
  • 因为当用户点击想要的品牌时,我通过 url 传递选择的品牌。我宁愿传递 id 而不是 brand_name。
  • 我明白了...我认为您无法在构面结果中获得品牌名称。我希望我错了。我遇到了同样的“问题”,但我只是在 url (...&event=eventname...) 中传递了品牌(在我的情况下是事件)名称
  • 您可以使用基于由 id 和名称组成的 script_field 的构面。然后在前端,您需要以某种方式从构面条目中去除 id 以便仅显示名称,但是当用户选择条目本身时,您可以保留应用过滤器的键。好听吗?
  • @javanna 嗯,我喜欢它!如果没有其他方法,我想我会坚持你的方法。谢谢!

标签: ruby-on-rails elasticsearch tire


【解决方案1】:

您可以使用基于 id 字段的构面,并结合将名称添加到每个条目的脚本,以便每个条目将由 id 和 name 组成:

"facets" : {
    "tag" : {
        "terms" : {
            "field" : "id",
            "script" : "term + \"_\" + _source.name"
        }
    }
}

然后在前端,您需要以某种方式从构面条目中去除 id,以便仅显示名称(我希望您的 id 不能包含_),但是您可以保留应用过滤器的密钥用户自己选择条目。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-10-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多