2017-07-27 119 views
1

我是彈性搜索領域的新成員。在elasticsearch中查詢複雜文檔Elasticsearch

我們正在處理我們的項目中存在的複雜文檔,這些文檔存儲在我們的elasticsearch數據庫中。

這是我們的文檔的一部分:

{ 
    "AAA":[ 
     { 
     "SSS":{ 
      "Description":{ 
       "Detail":[ 
        { 
        "Name":"A9", 
        "Infos":"...." 
        }, 
        { 
        "Name":"A8", 
        "Infos":"...." 
        }, 
        { 
        "Name":"A7", 
        "Infos":"...." 
        }, 
        { 
        "Name":"A6", 
        "Infos":"...." 
        }, 
        { 
        "Name":"A5", 
        "Infos":"...." 
        }, 
        { 
        "Name":"A4", 
        "Infos":"...." 
        }, 
        { 
        "Name":"A3", 
        "Infos":"...." 
        }, 
        { 
        "Name":"A2", 
        "Infos":"...." 
        }, 
        { 
        "Name":"A1", 
        "Infos":"...." 
        } 
       ] 
      } 
     } 
     } 
    ] 
} 

我想返回的「相關信息」 &「名稱」具體到"Name":"A1"爲example.I領域不想來顯示所有的表的查詢JSON對象的詳細信息,但只是對象,其中"Name":"A1"。 在其他方面,我想返回該文檔的這一部分的查詢:

{ 
    "AAA":[ 
     { 
     "SSS":{ 
      "Description":{ 
       "Detail":[ 
        { 
        "Name":"A1", 
        "Infos":"...." 
        } 
       ] 
      } 
     } 
     } 
    ] 
} 

我使用elasticsearch 5.4 這是我使用的映射:

{ 
    "mappings":{ 
     "-----":{ 
     "properties":{ 
      "AAA":{ 
       "type":"nested", 
       "properties":{ 
        "SSS":{ 
        "properties":{ 
         "Description":{ 
          "properties":{ 
           "Detail":{ 
           "type":"nested", 
           "properties":{ 
            "Infos":{ 
             "type":"keyword" 
            }, 
            "Name":{ 
             "type":"keyword" 
            } 
           } 
           } 
          } 
         } 
        } 
        } 
       } 
      } 
     } 
     } 
    } 
} 

這是兩個疑問我試着但它沒有工作:

GET /******/******/_search 
{ 
    "_source":["AAA.SSS.Description.Detail.Name","AAA.SSS.Description.Detail.Infos"], 
    "query": { 
     "query_string" : { 
      "default_field" : "AAA.SSS.Description.Detail.Name", 
      "query" : "A1" 

     } 
    } 
} 


GET /******/******/_search 
{ 
    "_source":["AAA.SSS.Description.Detail.Name","AAA.SSS.Description.Detail.Infos"], 

     "filter": [ 
     { "term": { "AAA.SSS.Description.Detail.Name": "A1" }} 

     ] 
} 

我想一整天,它沒有爲我工作。 任何人都可以幫助我。 在此先感謝。

+0

你'AAA.SSS.Detail'字段可能不是嵌套的。您應該閱讀以下內容,並瞭解如何使其工作:https://www.elastic.co/guide/en/elasticsearch/reference/current/nested.html – Val

+0

這是我正在使用的映射: 「映射」:{ 「-----」:{ 「屬性」:{ 「AAA」:{ 「類型」: 「嵌套」, 「屬性」:{ 「SSS」: { 「屬性」:{ 「描述」:{ 「屬性」:{ 「詳細信息」:{ 「類型」: 「嵌套」, 「屬性」:{ 「的相關信息」:{ 「類型」 :「keyword」}, 「名稱」:{ 「類型」: 「關鍵詞」}, }} } } } } } } } } } 你 –

+0

能告訴到目前爲止,你已經嘗試了什麼問題? – Val

回答

0

query_string查詢不能使用nested數據。您需要創建一個nested query並在其中查詢term。這應該讓你去:

GET /******/******/_search 
{ 
    "query": { 
    "nested": { 
     "path": "AAA", 
     "query": { 
     "nested": { 
      "path": "AAA.SSS.Description.Detail", 
      "query": { 
      "term": { 
       "AAA.SSS.Description.Detail.Name": "A1" 
      } 
      }, 
      "inner_hits": { 
      "_source": { 
       "includes": [ 
       "AAA.SSS.Description.Detail.Name", 
       "AAA.SSS.Description.Detail.Infos" 
       ] 
      } 
      } 
     } 
     } 
    } 
    } 
} 
+0

感謝您的回覆:我嘗試了查詢,但它給我帶來這個錯誤: { 「錯誤」:{ 「ROOT_CAUSE」:[{ 「類型」: 「illegal_argument_exception」, 「原因」: 「[inner_hits] _source不支持類型的值:START_ARRAY」 } ] 「類型」: 「illegal_argument_exception」, 「理由」: 「[inner_hits] _source不支持類型的值:START_ARRAY」 }, 「狀態」:400 } –

+0

我已經更新了我的答案。請再試一次 – Val

+0

查詢給我的所有AAA.SSS.Description.Detail.Name不只是AAA.SSS.Description.Detail.Name,它等於「A1」 –

0

這是我的示例工作查詢:

POST index/type/_search 
{ 
    "query": { 
    "nested": { 
     "path": "AAA.SSS.Description.Detail", 
     "query": { 
      "match": { 
      "AAA.SSS.Description.Detail.Name": "A1" 
      } 
     }, 
     "inner_hits" : { 
      "_source": { 
       "includes":["AAA.SSS.Description.Detail.Name","AAA.SSS.Description.Detail.Infos"] 
      } 
     } 
    } 
    } 
} 

,這是結果:

{ 
    "took": 4, 
    "timed_out": false, 
    "_shards": { 
    "total": 5, 
    "successful": 5, 
    "failed": 0 
    }, 
    "hits": { 
    "total": 1, 
    "max_score": 1.89712, 
    "hits": [ 
     { 
     "_index": "index", 
     "_type": "type", 
     "_id": "AV2NxhX8nWBA4r3kkKAM", 
     "_score": 1.89712, 
     "_source": { 
      "AAA": [ 
      { 
       "SSS": { 
       "Description": { 
        "Detail": [ 
        { 
         "Name": "A9", 
         "Infos": "...." 
        }, 
        { 
         "Name": "A8", 
         "Infos": "...." 
        }, 
        { 
         "Name": "A7", 
         "Infos": "...." 
        }, 
        { 
         "Name": "A6", 
         "Infos": "...." 
        }, 
        { 
         "Name": "A5", 
         "Infos": "...." 
        }, 
        { 
         "Name": "A4", 
         "Infos": "...." 
        }, 
        { 
         "Name": "A3", 
         "Infos": "...." 
        }, 
        { 
         "Name": "A2", 
         "Infos": "...." 
        }, 
        { 
         "Name": "A1", 
         "Infos": "...." 
        } 
        ] 
       } 
       } 
      } 
      ] 
     }, 
     "inner_hits": { 
      "AAA.SSS.Description.Detail": { 
      "hits": { 
       "total": 1, 
       "max_score": 1.89712, 
       "hits": [ 
       { 
        "_nested": { 
        "field": "AAA", 
        "offset": 0, 
        "_nested": { 
         "field": "SSS.Description.Detail", 
         "offset": 8 
        } 
        }, 
        "_score": 1.89712, 
        "_source": { 
        "AAA": { 
         "SSS.Description.Detail": { 
         "Infos": "....", 
         "Name": "A1" 
         } 
        } 
        } 
       } 
       ] 
      } 
      } 
     } 
     } 
    ] 
    } 
}