既然我做对了,你能告诉我改善表现吗?
我正在尝试在Ruby on Rails应用程序中实现聚合器过滤器(这并不重要)。我在以下条件下查询弹性搜索。
我需要的是在某些条件下过滤文档,也可以通过嵌套文档条件过滤它们。我不需要任何排名或评分/排序。我只需要在crawl_page_id
下汇总这样的查询。
非常感谢任何帮助。
这里是索引的映射:
{:created_at=>{:type=>"date"},
:updated_at=>{:type=>"date"},
:domain_id=>{:type=>"integer"},
:users=>{:type=>"integer"},
:new_users=>{:type=>"integer"},
:sessions=>{:type=>"integer"},
:pageviews=>{:type=>"integer"},
:session_duration=>{:type=>"integer"},
:bounces=>{:type=>"integer"},
:exits=>{:type=>"integer"},
:conversion_rate=>{:type=>"integer"},
:goals=>{:type=>"integer"},
:assists=>{:type=>"integer"},
:unique_referrers=>{:type=>"integer"},
:by_traffic_source=>{:type=>"nested",
:properties=>{
:source=>{:type=>"string", :index=>:not_analyzed},
:goals=>{:type=>"integer"},
:pageviews=>{:type=>"integer"},
:assists=>{:type=>"integer"}}},
:by_goals=>{:type=>"nested",
:properties=>{
:id=>{:type=>"integer"},
:goals=>{:type=>"integer"},
:assists=>{:type=>"integer"}}},
:url=>{:type=>"string"},
:timestamp=>{:type=>"date"},
:rdn_url=>{:type=>"string"},
:scheme=>{:type=>"string"},
:host=>{:type=>"string"},
:port=>{:type=>"integer"},
:path=>{:type=>"string"},
:query_string=>{:type=>"string"},
:crawl_page_id=>{:type=>"string"}
}
}
这个对我有用。有没有更好的方法(性能明智)来执行这样的查询?
{"query"=>
{"filtered"=>
{"query"=>{{"match_all"=>{}},
"filter"=>{
"bool"=>{
"must"=>[
{"term"=>{"domain_id"=>7721}},
{"range"=>{"goals"=>{"gte"=>0}}}
"nested"=>{"path"=>"by_traffic_source",
"filter"=>{
{"term"=>{"by_traffic_source.source"=>"organic"}}
}
}
}
]},
}
}
},
"aggs"=>{"crawl_pages"=>{"terms"=>{"field"=>"crawl_page_id", "size"=>200}}}}
答案 0 :(得分:0)
没关系,你可能不会比这更好。
{"query"=>
{"filtered"=>
{"query"=>{{"match_all"=>{}},
"filter"=>{
"bool"=>{
"must"=>[
{"term"=>{"domain_id"=>7721}},
{"range"=>{"goals"=>{"gte"=>0}}}
"nested"=>{"path"=>"by_traffic_source",
"filter"=>{
{"term"=>{"by_traffic_source.source"=>"organic"}}
}
}
}
]},
}
}
},
"aggs"=>{"crawl_pages"=>{"terms"=>{"field"=>"crawl_page_id", "size"=>200}}}}