alo*_*ony 5 ruby ruby-on-rails elasticsearch tire
我有几个使用elasticsearch索引的模型,其中一个模型有一个需要过滤的关联,但如果我在search方法中添加这样的东西
search.filter :range, 'sessions.starts_on' => {:gte => start_date,
:lte => ends_on}
Run Code Online (Sandbox Code Playgroud)
然后过滤掉所有模型,因为它们没有这种关联sessions.
那么有没有办法将过滤器应用于一个模型?
任何想法都非常感谢!
创建一个专门与该模型相关的轮胎索引模块,并将其包含在模型中。由于会话仅与模型关联,因此其参考将存在于将要发送到 Elasticsearch 的文档中。您必须像这样将会话文档合并到模型文档中,因为我们将文档的 json 传递给轮胎索引模块中的 Elasticsearch
def to_model_json
self.document.merge({"sessions" => sessions.as_json}).to_json
end
Run Code Online (Sandbox Code Playgroud)
该方法通过tire将json格式的文档传递给elasticsearch,后者会将它们的会话合并到文档中。
在轮胎索引模块中给出一个索引名称,您可以将其传递到轮胎搜索对象中以运行过滤器查询
现在创建一个轮胎搜索对象
search_object = Tire::Search::Search::new(Model.index_name, other attributes)
Run Code Online (Sandbox Code Playgroud)
您可以检查可以从https://github.com/karmi/tire传递的其他属性
然后像这样运行你的搜索方法,它将给出所需的结果
search_object.filter :range, 'sessions.starts_on' => {:gte => start_date,
:lte => ends_on}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
900 次 |
| 最近记录: |