Elasticsearch 嵌套查询聚合

Elasticsearch nested query aggregations

既然我做对了,你能给我一些改进性能的建议吗?

我正在尝试在我的 Ruby on Rails 应用程序中实施聚合器过滤器(这无关紧要)。我正在使用以下条件查询 elasticsearch。

我需要的是按特定条件过滤文档,也按嵌套文档条件过滤它们。我不需要任何排名或 scoring/sorting。我只需要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"}
}
}

这个对我有用。有没有更好的方法(perf.wise)来执行这样的查询?

   {"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}}}}

没关系,你可能找不到比这更好的了。

 {"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}}}}