Elasticsearch:es.index() 在推送消息时更改映射
Elasticsearch : es.index() changes the Mapping when message is pushed
我正在尝试将一些类似的消息推送到 elasticsearch
id=1
list=asd,bcv mnmn,kjkj, pop asd dgf
因此,每条消息都有一个 id
字段,它是一个字符串,以及一个 list
字段,其中包含一个字符串值列表
当我将它推入 elastic 并尝试在 kibana 中创建图表时,默认分析器启动并将我的 list
拆分为 space 字符。因此它打破了我的价值观。我试图为我的索引创建一个映射
mapping='''
{
"test":
{
"properties": {
"DocumentID": {
"type": "string"
},
"Tags":{
"type" : "string",
"index" : "not_analyzed"
}
}
}
}'''
es = Elasticsearch([{'host': server, 'port': port}])
indexName = "testindex"
es.indices.create(index=indexName, body=mapping)
所以这应该使用我定义的映射创建索引。现在,我简单地推送消息
es.index(indexName, docType, messageBody)
但即使是现在,Kibana 也打破了我的价值观!为什么未应用映射?
当我这样做时
GET /testindex/_mapping/test
我得到
{
"testindex": {
"mappings": {
"test": {
"properties": {
"DocumentID": {
"type": "string"
},
"Tags": {
"type": "string"
}
}
}
}
}
}
为什么映射发生了变化?我如何指定映射类型
es.index()
我能够通过
获得正确的映射
es.indices.create(index=indexName)
es.indices.put_mapping(docType, mapping, indexName)
我不明白为什么
es.indices.create(index=indexName, body=mapping)
没用。这应该按照 API 工作。
你们非常亲密。您需要在创建索引时提供根 mappings
对象,而在使用 _mapping
端点时不需要它,这就是 put_mapping
有效而 create
无效的原因。您可以在 api.
中看到
mapping = '''
{
"mappings": {
"test": {
"properties": {
"DocumentID": {
"type": "string"
},
"Tags": {
"type": "string",
"index": "not_analyzed"
}
}
}
}
}
'''
现在这将按预期工作
es.indices.create(index=indexName, body=mapping)
希望对您有所帮助
我正在尝试将一些类似的消息推送到 elasticsearch
id=1
list=asd,bcv mnmn,kjkj, pop asd dgf
因此,每条消息都有一个 id
字段,它是一个字符串,以及一个 list
字段,其中包含一个字符串值列表
当我将它推入 elastic 并尝试在 kibana 中创建图表时,默认分析器启动并将我的 list
拆分为 space 字符。因此它打破了我的价值观。我试图为我的索引创建一个映射
mapping='''
{
"test":
{
"properties": {
"DocumentID": {
"type": "string"
},
"Tags":{
"type" : "string",
"index" : "not_analyzed"
}
}
}
}'''
es = Elasticsearch([{'host': server, 'port': port}])
indexName = "testindex"
es.indices.create(index=indexName, body=mapping)
所以这应该使用我定义的映射创建索引。现在,我简单地推送消息
es.index(indexName, docType, messageBody)
但即使是现在,Kibana 也打破了我的价值观!为什么未应用映射?
当我这样做时
GET /testindex/_mapping/test
我得到
{
"testindex": {
"mappings": {
"test": {
"properties": {
"DocumentID": {
"type": "string"
},
"Tags": {
"type": "string"
}
}
}
}
}
}
为什么映射发生了变化?我如何指定映射类型
es.index()
我能够通过
获得正确的映射es.indices.create(index=indexName)
es.indices.put_mapping(docType, mapping, indexName)
我不明白为什么
es.indices.create(index=indexName, body=mapping)
没用。这应该按照 API 工作。
你们非常亲密。您需要在创建索引时提供根 mappings
对象,而在使用 _mapping
端点时不需要它,这就是 put_mapping
有效而 create
无效的原因。您可以在 api.
mapping = '''
{
"mappings": {
"test": {
"properties": {
"DocumentID": {
"type": "string"
},
"Tags": {
"type": "string",
"index": "not_analyzed"
}
}
}
}
}
'''
现在这将按预期工作
es.indices.create(index=indexName, body=mapping)
希望对您有所帮助