我的搜索工作正常。
但是我必须键入“1”或“2”才能获得“室友”或“子租约”的结果。
模型有一个称为category_id
的列,它是一个整数。
模型Category
的列:name
是字符串。
因此,我有category_id 1是“roommate”,2是“sublet”
以下是我的房屋模型:
class Housing < ActiveRecord::Base
extend FriendlyId
friendly_id :title, use: :slugged
include Elasticsearch::Model
include Elasticsearch::Model::Callbacks
belongs_to :user
belongs_to :category
validates :title, :presence => true
validates :category_id, :presence => true
validates :created_at, :presence => false
validates :user_email, :presence => true
validates :description, :presence => false
validates_length_of :title, :maximum => 30
def self.search(query)
__elasticsearch__.search(
{
query: {
# multi_match: {
simple_query_string: {
query: query,
fields: ['title^10', 'category_id']
}
}
}
)
end
end
我该如何解决
fields: ['title^10', 'category_id']
,以便用户可以搜索“roommate”而不是必须搜索整数“1”来获得Roommate的结果?我尝试了
fields: ['title^10', 'category.name']
,但无法正常工作。
最佳答案
除非您定义了正确的映射,否则fields: ['title^10', 'category.name']
将不起作用。 Elasticsearch不了解您的关联。 ES是一个文档存储,并使用其自己的文档存储来搜索记录。因此,除非您将类别名称添加到ES中存储的文档中,否则您将无法搜索它。TL;DR
定义一个映射。例:
mapping dynamic: 'strict' do
indexes :category do
indexes :name
end
indexes :title
end
此处类别现在将作为嵌套对象存储在索引内,因此可以使用
category.name
搜索
关于ruby-on-rails - 如何在Rails中使用elasticsearch来搜索category.name?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36830952/