2014-10-08 183 views
0

的哈希我在ES這樣的對象:搜索在陣列

{ 
    _index: products_development_20141007185853021 
    _type: product 
    _id: 5039 
    _version: 1 
    _score: 1 
    _source: { 
    name: Le Moelleux - Gâ teau tout Chocolat 
    quantity: 500 
    quantity_unit: gram 
    store_ids: [ 
     503 
     504 
     505 
    ] 
    name_suggest: Le Moelleux - Gâ teau tout Chocolat 
    store_prices: [{ 
     id: 503 
     price: 2.65 
    } { 
     id: 504 
     price: 2.65 
    } { 
     id: 505 
     price: 2.65 
    } ] 
    product_categories: [{ 
     id: 109 
     name: Viennoiserie 
     parent: { 
     id: 105 
     name: Pain, 
     viennoiserie, 
     biscotte 
     parent_id: 92 
     tags: [ 
      pains et viennoiseries 
      biscotte 
      tartine 
      biscottes tartines 
      boulangerie 
      pâ tisseries moelleuses 
     ] 
     } 
    }] 
    product_brand: { 
     id: 1134 
     name: KER CADELAC 
     type: null 
    } 
    store_company: { 
     id: 4 
     name: Chronodrive 
    } 
    categories_and_ancestors: [{ 
     id: 109 
    } { 
     id: 105 
    } { 
     id: 92 
    }] 
    } 
} 

有了這個映射:

mappings: { 
    product: { 
    properties: { 
     item_count: { 
     type: integer 
     } 
     name_suggest: { 
     search_analyzer: whitespace_analyzer 
     index_analyzer: nGram_analyzer 
     type: string 
     } 
     store_company: { 
     properties: { 
      name: { 
      type: string 
      } 
      id: { 
      type: long 
      } 
     } 
     } 
     quantity_unit: { 
     index: not_analyzed 
     type: string 
     } 
     quantity: { 
     type: double 
     } 
     store_ids: { 
     type: string 
     } 
     store_prices: { 
     properties: { 
      price: { 
      type: double 
      } 
      id: { 
      type: integer 
      } 
     } 
     } 
     categories_and_ancestors: { 
     properties: { 
      id: { 
      type: integer 
      } 
     } 
     } 
     product_categories: { 
     properties: { 
      parent: { 
      properties: { 
       parent_id: { 
       type: long 
       } 
       name: { 
       type: string 
       } 
       id: { 
       type: long 
       } 
       tags: { 
       type: string 
       } 
      } 
      } 
      name: { 
      type: string 
      } 
      id: { 
      type: integer 
      } 
     } 
     } 
     name: { 
     analyzer: product_analyzer 
     type: string 
     } 
     product_brand: { 
     properties: { 
      name: { 
      type: string 
      fields: { 
       raw: { 
       index: not_analyzed 
       type: string 
       } 
      } 
      } 
      id: { 
      type: integer 
      } 
      type: { 
      type: string 
      } 
     } 
     } 
    } 
    } 
} 

我怎樣才能使一個請求或過濾得到的所有文件,其中store_prices有不是:

{ 
    id: 503 
    price: 0 
} 

我的意思是完整的對象。我想把這個查詢在ES翻譯:如果你想元組

select from products where store_prices does not include { id: 503, price: 0 } 

謝謝

+0

我不是在您的映射中看到store_prices。 – 2014-10-08 10:25:53

+0

Oups,我沒貼好映射 – Sebastien 2014-10-08 10:35:40

回答

1

{ID:503,價格:0}不包含元組(和匹配整個元組的該數組中,而不是來自一個元組的「id」和來自另一個元組的「價格」),那麼你不能。你需要嵌套對象。最好的解釋是here, in the documentation

對於工作,你需要這個映射店內價格:

"store_prices": { 
    "type": "nested", 
    "properties": { 
    "price": { 
     "type": "double" 
    }, 
    "id": { 
     "type": "integer" 
    } 
    } 
} 

,並查詢(過濾器)用於上述映射,你會使用這樣的:

{ 
    "query": { 
    "filtered": { 
     "filter": { 
     "bool": { 
      "must_not": [ 
      { 
       "nested": { 
       "path": "store_prices", 
       "query": { 
        "bool": { 
        "must": [ 
         { "match": {"store_prices.id": "503"}}, 
         { "match": {"store_prices.price": "2.65"}} 
        ] 
        }}}} 
      ]}}} 
    } 
} 
+0

謝謝!我正在等待其他人回答,然後接受你的。 – Sebastien 2014-10-08 15:43:23