我在Rails 4项目中使用elasticsearch-model gem将我的用户存储在MySQL和Elasticsearch中。在我的项目中,Elasticsearch部分用于查找具有某些MySQL字段的人员,例如geo_point,birthdate,gender等...但不是我在MySQL"用户"中的所有字段。表格对用户的搜索很有用。
因此,我想在MySQL中存储所有用户字段,并且只在Elasticsearch中存储用户搜索所需的字段。
要仅在创建时存储必填字段,我已覆盖方法' as_indexed_json'和使用:
as_json(only: ['id', 'gender', 'location']
在创造中,事情很有效。但是,当我使用仅应保存在MySQL中的字段更新用户时,无论如何都会将其添加到Elasticsearch。
例如,我的用户模型有" id","性别"," is_premium","状态"," created_at"," birthdate"," location"。 在Elasticsearch中,我只想保存" id","性别","生日和#34;,"位置"
我该怎么做? 谢谢你的帮助。
答案 0 :(得分:1)
这是elasticsearch-rails的问题(请参阅github)。
简而言之,默认更新回调调用update_document
,但不使用as_indexed_json
:它使用ActiveModel::Dirty
仅发送更改的列。
您可以通过覆盖update_document
方法来解决此问题,以便它只包含您想要的内容,或者更改回调的功能,例如
after_commit on: [:create, :update] do
index_document
end
after_commit on: [:destroy] do
delete_document
end
而不是使用默认的回调模块将导致index_document
被使用,这总是进行“哑”完全更新,而不是尝试仅发送增量。