2015-07-29 3 views
1

Теперь, когда я понял, не могли бы вы посоветовать мне улучшить производительность?Агрегаты вложенных запросов Elasticsearch

Я пытаюсь реализовать фильтр агрегатора в моем приложении Ruby on Rails (что не имеет большого значения). Я запрашиваю elasticsearch со следующими условиями.

Мне нужно фильтровать документ с определенными условиями, фильтровать их также вложенным условием документа. Мне не нужен ни ранжирование, ни подсчет/сортировка. Мне просто нужна агрегирование такого запроса под номером 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}}}} 
+0

Предложение, это помогло бы чрезвычайно если вы заявили в словах, что ваш запрос/агрегация должен делать вместо того, чтобы заставить читателя вывести его из ваших образцов кода –

+0

Что мне нужно фильтровать документ с определенными условиями , фильтровать их также вложенным условием документа. Мне не нужен ни ранжирование, ни подсчет/сортировка. Мне просто нужно агрегирование такого запроса под crawl_page_id. – adamliesko

ответ

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}}}} 
Смежные вопросы