2017-01-13 68 views
0

我有一个这样的指标:搜索elasticsearch文件,然后查询嵌套字段

{ 
    "rentals": { 
    "aliases": {}, 
    "mappings": { 
     "rental": { 
     "properties": { 

     "address": { 
      "type": "text" 
     }, 

     "availability": { 
      "type": "nested", 
      "properties": { 
       "chargeBasis": { 
        "type": "text" 
       }, 
       "date": { 
        "type": "date" 
       }, 
       "isAvailable": { 
        "type": "boolean" 
       }, 
       "rate": { 
        "type": "double" 
       } 
      } 
     } 
    } 

这是我的使用情况:

  1. 我需要搜索所有的“租赁“有一个给定的地址。

    • 这很容易,做
  2. 我需要得到“可用性”的数据,所有这些“出租”搜索;仅适用于今天的日期

    • 这是我坚持的部分,我如何查询所有“出租”的嵌套文件?

回答

0

您需要使用nested query

因为嵌套的对象进行索引作为单独的隐藏文件,我们不能直接对它们进行查询。相反,我们必须使用嵌套查询来访问它们。

尝试类似:

{ 
    "query": { 
    "nested": { 
     "path": "availability", 
     "query": { 
     "term": { 
      "availability.date": "2015-01-01" 
     } 
     } 
    } 
    } 
} 
+0

但是,这将影响到第一个搜索结果。 没有可用日期的文档不会显示 –

+0

您对第一个搜索结果有什么意义? 是的,如果您正在查找特定的可用日期(今天),则无法显示没有可用日期的文档。如果您还想要文件缺少该属性,则可以使用布尔查询。 –