2012-04-16 41 views
0

哪種結構更適合查詢:哪種結構更適合在elasticsearch中搜索庫存?

人有5個香蕉和1個蘋果。

人有5個香蕉或1個蘋果。

嵌套?

{ 
    id: 1, 
    has: 
    [ 
     { 
      'name': 'banana', 
      'quantity': 5, 
     }, 
     { 
      'name': 'apple', 
      'quantity': 1, 
      'species': 'gala' 
     } 
    ] 
} 

還是固定插槽?

{ 
    id: 1, 
    slot1: { 
      'name': 'banana', 
      'quantity': 5, 
      }, 
    slot2: { 
      'name': 'apple', 
      'quantity': 1, 
      'species': 'gala' 
      } 
    slot3: null, 
    slot4: null 
} 

回答

1

嵌套的方法更加簡單:你可以做一個簡單的嵌套查詢[1],而不必做SLOT1或SLOT2或者......每個索引「插槽」的文件會更簡單,如果人沒有其他領域。

[1] http://www.elasticsearch.org/guide/reference/query-dsl/nested-query.html

+0

每個索引「插槽」的文件,會導致出現在結果列表,而不是人的插槽。這意味着同一個人可以在同一個結果列表中多次出現。因此,有必要在客戶端使用分面搜索或刪除重複項。 – imotov 2012-04-16 17:18:39

0

我會去:

{ 
    id: 1, 
    banana: { 
     'quantity': 5, 
    }, 
    apple: { 
     'quantity': 1, 
     'species': 'gala' 
    } 
} 

則查詢是簡單的。通過query string query你的查詢看起來像:

banana.quantity:5 AND apple.quantity:1 

banana.quantity:5 OR apple.quantity:1 
+0

我估計可能有1000個不同的項目。將不僅僅是香蕉和蘋果。這真的是個好主意嗎? – user1335301 2012-04-16 23:10:13

+0

從你的問題中我不清楚:每個插槽是一個單獨的文件嗎? – Karussell 2012-04-17 08:34:28