[英]Search in belongs_to association in RoR, ElasticSearch with Searchkick
我有两个型号:
class Venue < ActiveRecord::Base
has_many :loyalty_cards
end
class LoyaltyCard < ActiveRecord::Base
belongs_to :venue
searchkick word_start: [:venue_name, :venue_name_from_relation]
def search_data
attributes.merge(
venue_name_from_relation: self.venue(&:name)
)
end
end
LoyaltyCard有两个领域:
venue_id: int #used for relation with venue if such venue exists
venue_name: string #or you can add venue name manually when creating loyalty card
我想搜索这两个字段并按照GitHub上的Searchkick isses(即https://github.com/ankane/searchkick/issues/112 )的建议尝试以下调整:searchkick word_start:[:venue_name,:venue_name_from_relation]
def search_data
attributes.merge(
venue_name_from_relation: self.venue(&:name)
)
end
它成功搜索venue_name,但不在相关的场所。
我也尝试过以下(以及其他一些变化):
def search_data
{
venue_name_from_relation: venue.map(&:name)
}
end
但它无法使用nil类错误重新编制索引。
有任何想法吗?
谢谢,罗马
要正确获取场地名称,因为它是belongs_to
关联而不是has_many
def search_data
attributes.merge(
venue_name_from_relation: self.venue_name_from_relation
)
end
def venue_name_from_relation
self.venue.name
end
然后用它来搜索
fields = ["venue_name", "venue_name_from_relation"]
LoyaltyCard.search(query, fields: fields, load: false)
使用(boost venue_name
over venue_name_from_relation
)将一个字段venue_name
另一个字段
fields = ["venue_name^2", "venue_name_from_relation"]
LoyaltyCard.search(query, fields: fields, load: false)
在搜索之前不要忘记重新reindex
。 LoyaltyCard.reindex
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.