2017-09-18 19 views
0

正しい手順については、何か助けやアイデアが必要です。
私は既に大きな文書の索引を作成しました。今私はほぼ同じ内容のいくつかの文書があることを知りました。Elasticsearchの結果フィルタとページ番号

{ 
    "title": "myDocument", 
    "date": "2017-09-18", 
    "page": 1 
} 

{ 
    "title": "myDocument", 
    "date": "2017-09-18", 
    "page": 2 
} 

タイトルフィールドはテキストとしてマップされ、日付は日付であり、ページは整数です。あなたが見ることができるように、唯一の違いはページの値です。
ここでは、クエリを作成してこれらの重複を除外したいと考えています。フィールドコラプシングは良い方法だと思われますが、この場合は正しい結果を得ることができず、それは私のために重要です。
他の方法は、すべての結果を最初に取得してから「手動で」フィルタリングすることですが、ページネーションに問題があります。

答えて

1

このようなものを試してみてください。

GET index/type/_search 
{ 
    "aggs": { 
    "count_by_title_date_page":{ 
     "terms": { 
     "field": "title.keyword", 
     "size": 100 
     }, 
     "aggs": { 
     "date": { 
      "terms": { 
      "field": "date.keyword", 
      "size": 100 
      }, 
      "aggs": { 
      "page": { 
       "terms": { 
       "field": "page.keyword", 
       "size": 100 
       } 
      } 
      } 
     } 
     } 
    } 
    } 
} 
+0

[OK]をクリックして合計ヒット数を取得しますか?たとえば、「2番目のページ」の結果を取得するために、size = 10とfrom = 11を設定するとしますか? – altralaser

+0

集計は、最初の10の文書だけでなく、索引のすべての文書に適用されます。集計と検索を混在させています。集約は全体に対して実行されます。上記のクエリは、タイトルと日付に基づいて各ページのページ数を表示します。これは、タイトル、日付、Sqlの観点からのページ別のグループのようです。 –

関連する問題