我使用Elasticsearch和Elasticsearch Rails gem。我有两个通过ActiveRecord关联的模型,我试图用Elasticsearch对它们进行索引和搜索。Elasticsearch Rails索引问题
这里是我的专卖店模式
store.rb
has_many :addresses
has_many :jobs
def as_indexed_json
self.as_json(include: {
customer: { include: { addresses: {}, jobs: {} } },
vendors: {}
})
end
settings index: { number_of_shards: 1 } do
mapping dynamic: 'false' do
indexes :id
indexes :store_number
indexes :manager
indexes :customer do
indexes :first_name
indexes :addresses do
indexes :city
indexes :state
end
indexes :jobs do
indexes :job_number
end
end
end
end
这里是我的地址模型:
def as_indexed_json
end
settings index: { number_of_shards: 1 } do
mapping dynamic: 'false' do
indexes :city
indexes :state
end
end
我也使用Searchkit我的前端UI。 Searchkit能够聚合并显示商店模型中的所有属性(例如商店编号和经理)。但是,它无法查看嵌套的项目。换句话说,我无法在客户下面的工作中聚合和检索job_number。我能够查看客户名称等。我曾尝试在作业和所有其他对象旁边使用类型:“嵌套”,但这没有什么区别。我曾尝试调整as_indexed_json而没有任何运气。任何人对此有任何想法?我沉迷于这一个。
感谢所有这些,我想我遵循你所说的话。我认为唯一不确定的是当你说重写as_indexed_json方法时。地址和工作都在客户模型上。那么,我应该把它放在客户模型中吗?我所拥有的层次是商店 - >顾客 - >地址或商店 - >顾客 - >工作。我了解self.addresses.map(&:city),只是想确定我放在哪里。再次感谢您的帮助。 –
@MikeRiley从你发布的代码中,'store'模型'has_many''地址'和'store'也'has_many''作业',我假设'store'是你可搜索的模型,即你想搜索“商店”记录。如果是这样的话,我发布的所有内容都会进入“商店”模式。 –