在我的rails项目中,我有两个模型:
class Student < ActiveRecord::Base
attr_accessible :name
has_many :homeworks
...
end
class Homework < ActiveRecord::Base
include Tire::Model::Search
include Tire::Model::Callbacks
attr_accessible :grade
belongs_to :student
...
end
我想在弹性搜索方面运行查询:
这个简化的例子可以在不使用elasticsearch的情况下解决,但我正在开发的项目具有全文搜索功能,需要弹性搜索。
我尝试了以下方法:
我很感激有关如何将这些模型映射到elasticsearch并有效执行查询的建议。
不要求完整的解决方案,只是一般的方向感。我应该使用嵌套对象吗?将学生的属性存储在作业中并使用构面进行分组?
提前致谢!
答案 0 :(得分:0)
在类似的用例中,我使用了_parent映射,以便homework具有以下的映射属性:
"_parent": "student"
然后我做一个常规查询:
"query":{
"filtered":{
"filter": {
"and": [{
"term": {"_type": "student"},
"has_child": {
"query":{
"filtered":{
"filter":{
"term":{"grade", "value"}
...
(除非在另一个项目的类似查询中,否则不进行测试)
has_child的过滤查询是重要的部分,因为它允许您搜索具有F级作业的学生并将其包含在您的方面。
然后,您需要扩展filter子句以包含其余的查询术语和分页。筛选后的查询会限制构面使用的文档,因此您可以选择通过created_at字段或其他内容进行额外过滤,从而限制您正在使用的结果。