Elasticsearch嵌套查询聚合

时间:2015-07-29 17:31:11

标签: ruby-on-rails ruby elasticsearch lucene nosql

既然我做对了,你能告诉我改善表现吗?

我正在尝试在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}}}}

1 个答案:

答案 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}}}}