我正在尝试将这样的消息推送到elasticsearch
id=1
list=asd,bcv mnmn,kjkj, pop asd dgf
所以,每条消息都有一个id
字段,这是一个字符串,一个list
字段包含一个字符串值列表
当我将其推入弹性并尝试在kibana中创建图表时,默认分析器启动并按空格字符分割我的list
。因此它破坏了我的价值观。我试图为我的索引创建一个映射
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()
答案 0 :(得分:1)
你非常接近。您需要在创建索引时提供根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)
希望这有帮助
答案 1 :(得分:0)
我能够通过
获得正确的映射es.indices.create(index=indexName)
es.indices.put_mapping(docType, mapping, indexName)
我不明白为什么
es.indices.create(index=indexName, body=mapping)
没用。这应该按照API工作。