2013-10-26 59 views
2

Elasticsearch初學者。我覺得這應該很簡單,但我在這裏卡住了。我有一個映射的帖子,看起來像這樣:按嵌套對象計數的彈性搜索順序

[ post1: { 
    title: 'asdfasd', 
    comments: [commment1, comment2, comment3] 
}, 
post2: { 
    title: 'asdf', 
    comments: [comment1, comment2] 
} 
. 
. 
.] 

我試圖按標題搜索它們,然後通過評論數訂購。我可以通過標題搜索得很好,但我有點困惑,以至於如何通過評論計數排序結果。這樣做最好的方法是什麼?

回答

13

你有兩個選擇 -

  1. 使用script得到一個數組的長度。所以,你會做這樣的事情:

    { 
        "query" : { 
        .... 
        }, 
        "sort" : { 
        "_script" : { 
         "script" : "doc['comments'].values.length", 
         "type" : "number", 
         "order" : "desc" 
        } 
        } 
    } 
    
  2. 保留其他字段的評論的數量,每次添加評論也增加了註釋計數器的值,並且排序它。

如果您有大量數據,選項#2更可取。如果您必須在大量文檔集上計算腳本,則使用腳本會產生開銷,並且會增加搜索時間。另一方面,按字段排序在性能方面要好得多。我會去#2。