按文档类型查询特定字段

时间:2014-02-13 14:51:53

标签: elasticsearch

我目前正在开始使用Elasticsearch,我正在尝试构建一个搜索查询,在不同的字段中查找关键字,具体取决于文档类型。

  

示例:

     

索引名称:index1

     

文件类型:

     
      
  • doc1(_id,名称,大小,颜色,重量)
  •   
  • doc2(_id,名称,持续时间,长度,宽度,高度)
  •   

现在我想查询index1类型为doc1doc2的文档,但在doc1我只想搜索name列,{ {1}}和size,而在weight我希望在doc2namelength列中进行搜索。

如何在单个查询中实现此目的?

1 个答案:

答案 0 :(得分:2)

您可以按类型和名称引用字段,并使用bool查询。一个基本的例子如下。

{
    "query": {
        "bool": {
            "should": [
               {
                   "bool": {
                       "must": [
                          {
                              "term": {
                                 "doc1.name": {
                                    "value": "2"
                                 }
                              }
                          },
                          {
                              "term": {
                                 "doc1.size": {
                                    "value": "23"
                                 }
                              }
                          },
                          {
                              "term": {
                                 "doc1.weight": {
                                    "value": "52"
                                 }
                              }
                          }
                       ]
                   }
               },
               {
                   "bool": {
                       "must": [
                          {
                               "term": {
                                 "doc2.name": {
                                    "value": "2"
                                 }
                              }
                          },
                          {
                              "term": {
                                 "doc2.length": {
                                    "value": "23"
                                 }
                              }
                          },
                          {
                              "term": {
                                 "doc2.height": {
                                    "value": "52"
                                 }
                              }
                          }
                       ]
                   }
               }
            ]
        }
    }
}