![](/img/trans.png)
[英]How to get nested documents by field value from other documents (ElasticSearch)?
[英]How to get nested types in Elasticsearch
我有以下文件:
{
"_index" : "testdb",
"_type" : "artWork",
"_id" : "0",
"_version" : 4,
"found" : true,
"_source":{"uuid":0,
"StatusHistoryList":[
{
"ArtWorkDate":"2015-08-28T15:52:03.030+05:00",
"ArtworkStatus":"ACTIVE"
},
{
"ArtWorkDate":"2015-08-28T15:52:03.030+05:00",
"ArtworkStatus":"INACTIVE"
}
]
}
這是文檔的映射:
{
"testdb" : {
"mappings" : {
"artWork" : {
"properties" : {
"StatusHistoryList" : {
"type" : "nested",
"properties" : {
"ArtWorkDate" : {
"type" : "string",
"store" : true
},
"ArtworkStatus" : {
"type" : "string",
"store" : true
}
}
},
"uuid" : {
"type" : "integer",
"store" : true
}
}
}
}
}
}
現在,我想訪問StatusHistoryList
的值。 如果這樣做,我將得到空值:
val get = client.prepareGet("testdb", "artWork", Id.toString()).setOperationThreaded(false)
.setFields("uuid",,"StatusHistoryList.ArtworkStatus","StatusHistoryList.ArtWorkDate","_source")
.execute()
.actionGet()
var artworkStatusList= get.getField("StatusHistoryList.ArtworkStatus").getValues.toArray()
var artWorkDateList= get.getField("StatusHistoryList.ArtWorkDate").getValues.toArray()
然后我從代碼中得到了空值,但是我的文檔包含了這些值,然后我發現了這個問題,所以在此之后我嘗試這樣做
var smap = get.getSource.get("StatusHistoryList").asInstanceOf[Map[String,Object]]
但是然后ClassCastException
java.lang.ClassCastException: java.util.ArrayList cannot be cast to java.util.Map
請幫助我如何獲取StatusHistoryList
的ArtworkStatus
和ArtWorkDate
值,請指導我,我將非常感謝您。
您幾乎已經得出了解決方案。 GET請求已檢索到響應,但問題在於解析響應。
讓我們看看問題所在。 以下是彈性搜索返回的文件來源
{
"uuid":0,
"StatusHistoryList":[
{
"ArtWorkDate":"2015-08-28T15:52:03.030+05:00",
"ArtworkStatus":"ACTIVE"
},
{
"ArtWorkDate":"2015-08-28T15:52:03.030+05:00",
"ArtworkStatus":"INACTIVE"
}
]
}
當我們執行get.getSource.get("StatusHistoryList")
它將返回List get.getSource.get("StatusHistoryList")
對象,而不是Map。 這就是classCastException
異常的原因。
因此,如果將響應轉換為對象列表,則將解決問題。
但這不是理想的解決方案。 一些庫(例如Jackson-Faterxml)可以為您完成這項工作。 使用fasterxml庫,您可以將json綁定到等效的POJO對象。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.