[英]How to index list of object in Elasticsearch?
我導入到ElasticSearch中的文檔格式如下所示:
{
'id':'514d4e9f-09e7-4f13-b6c9-a0aa9b4f37a0'
'created':'2019-09-06 06:09:33.044433',
'meta':{
'userTags':[
{
'intensity':'1',
'sentiment':'0.84',
'keyword':'train'
},
{
'intensity':'1',
'sentiment':'-0.76',
'keyword':'amtrak'
}
]
}
}
...對python有興趣:
r = requests.put(itemUrl, auth = authObj, json = document, headers = headers)
這里的想法是,ElasticSearch將把keyword
, intensity
和sentiment
視為可以稍后查詢的字段。 但是,在ElasticSearch端,我可以觀察到這沒有發生(我將Kibana用於搜索UI)-相反,我看到了字段“ meta.userTags”,其值為整個對象列表。
如何在列表中創建ElasticSearch索引元素?
我使用了您提供的文檔主體來創建新索引'testind',並使用Postman REST客戶端鍵入'testTyp'。
POST http://localhost:9200/testind/testTyp
{
"id":"514d4e9f-09e7-4f13-b6c9-a0aa9b4f37a0",
"created":"2019-09-06 06:09:33.044433",
"meta":{
"userTags":[
{
"intensity":"1",
"sentiment":"0.84",
"keyword":"train"
},
{
"intensity":"1",
"sentiment":"-0.76",
"keyword":"amtrak"
}
]
}
}
當我查詢索引的映射時,這就是我得到的:
GET http://localhost:9200/testind/testTyp/_mapping
{
"testind":{
"mappings":{
"testTyp":{
"properties":{
"created":{
"type":"text",
"fields":{
"keyword":{
"type":"keyword",
"ignore_above":256
}
}
},
"id":{
"type":"text",
"fields":{
"keyword":{
"type":"keyword",
"ignore_above":256
}
}
},
"meta":{
"properties":{
"userTags":{
"properties":{
"intensity":{
"type":"text",
"fields":{
"keyword":{
"type":"keyword",
"ignore_above":256
}
}
},
"keyword":{
"type":"text",
"fields":{
"keyword":{
"type":"keyword",
"ignore_above":256
}
}
},
"sentiment":{
"type":"text",
"fields":{
"keyword":{
"type":"keyword",
"ignore_above":256
}
}
}
}
}
}
}
}
}
}
}
}
正如您在映射中看到的那樣,字段是映射的一部分,以后可以根據需要進行查詢,因此,只要字段名不是其中之一,我就不會在這里看到問題-https:// www .elastic.co / guide / zh-cn / elasticsearch / reference / 6.4 / sql-syntax-reserved.html (您可能希望避免使用術語“關鍵字”,因為稍后在編寫搜索查詢時可能會感到困惑,因為字段名和類型都相同-'關鍵字')。 此外,請注意一件事,該映射是通過Elasticsearch中的動態映射( https://www.elastic.co/guide/en/elasticsearch/reference/6.3/dynamic-field-mapping.html#dynamic-field-mapping )創建的因此,數據類型是由Elasticsearch根據您提供的值確定的。但是,這可能並不總是准確的,因此,為了防止您可以使用PUT _mapping API為索引定義自己的映射,然后防止使用新的類型中的字段不會添加到映射中。
您不需要特殊的映射即可為列表建立索引-每個字段都可以包含一個或多個相同類型的值。 請參閱數組數據類型 。
對於對象列表,可以將它們索引為object
或nested
數據類型。 默認情況下,elastic使用object
數據類型。 在這種情況下,您可以查詢meta.userTags.keyword
或/和meta.userTags.sentiment
。 結果將始終包含具有獨立匹配值的整個文檔,即。 搜索keyword=train
和sentiment=-0.76
您將找到id=514d4e9f-09e7-4f13-b6c9-a0aa9b4f37a0
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.