2014-10-08 150 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