一、Nested類型的介紹
Elasticsearch Nested類型是指將一個對象數組作為一個字段進行索引。Nested類型是一種特殊的對象類型,它可以用來存儲在嵌套對象中包含的其他對象信息。這個Nested對象可看做是一個嵌套的對象和它的子文檔的集合,可以在同一個document中進行索引。
為了使用Nested類型,要使用下面三個步驟:
1、創建一個mapping
2、在該字段上使用Nested類型,並在字段中定義它內部的對象或屬性
3、存儲和查詢數據
{
"mappings": {
"properties": {
"manufacturer": {
"type": "nested",
"properties": {
"name": { "type": "text" },
"location": { "type": "geo_point" }
}
}
}
}
}
二、Nested類型的應用場景
Nested類型主要應用於以下兩種情況:
1、嵌套的對象具有多個屬性,每個屬性都需要各自獨立地搜索。
2、嵌套的對象通常會作為一個整體來搜索,比如博客文章,具有標題、正文、標籤等屬性。
在這些情況下,Nested類型都可以發揮出很好的效果。然而,Nested類型也存在一些缺點。Nested類型會在內存中重複保存與其相關的文檔,因此在數據壓縮時,內存需求量會增加。
三、Nested類型的使用方式
1、創建Mapping
Nested類型必須在索引mapping時,作為一種複合類型進行定義。
PUT nested_test
{
"mappings": {
"properties": {
"name": {"type": "keyword"},
"age": {"type": "integer"},
"sex": {"type": "keyword"},
"notes": {
"type": "nested",
"properties": {
"title": {"type": "text"},
"content": {"type": "text"},
"date": {"type": "date"}
}
}
}
}
}
2、索引文檔
Nested類型字段的支持直接給定內部對象的一個數組,配合它的properties實現保存、查詢和表達式計算的支持。
PUT /index/_doc/1
{
"name":"tom",
"age":18,
"sex":"male",
"notes":[
{
"title":"note1",
"content":"hello elasticsearch",
"date":"2020-01-01"
},
{
"title":"note2",
"content":"hello nested type",
"date":"2020-01-02"
}
]
}
3、查詢Nested類型
在查詢時,Nested類型的字段要進行特殊處理。要查詢內部的字段時,必須使用dot notation指明嵌套字段和其屬性名稱。
GET index/_search
{
"query": {
"nested": {
"path": "notes",
"query": {
"bool": {
"must": [
{"match": {"notes.title": "note1"}},
{"range": {"notes.date": {"gt":"2019-12-31"}}}
]
}
}
}
}
}
四、Nested類型的注意事項
1、嵌套字段不能被映射為子文檔或其他同級的Object類型。
2、Nested類型內部如果有多個屬性,則每個屬性都是一個單獨的字段。
3、Nested類型不支持聚合查詢。
4、嵌套文檔必須具備唯一標識。
5、查詢時,必須使用Nested類型的嵌套路徑。
6、存儲和查詢數據的性能延遲比較高。
五、總結
本篇文章通過介紹Nested類型的基本信息、使用方式及注意事項,讓讀者對Nested類型有了一個更深入的了解。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/190305.html
微信掃一掃
支付寶掃一掃