lit*_*ely 2 python elasticsearch
我使用elasticsearch python api来创建映射,但是出了点问题:
es = Elasticsearch("localhost:9200")
request_body = {
"settings": {
"number_of_shards": 5,
"number_of_replicas": 1
},
'mappings': {
'examplecase': {
'properties': {
'tbl_id': {'index': 'not_analyzed', 'type': 'string'},
'texts': {'index': 'analyzed', 'type': 'string'},
}
}
}
}
es.indices.create(index='example_index', body=request_body)
Run Code Online (Sandbox Code Playgroud)
它显示elasticsearch.exceptions.RequestError: RequestError(400, 'mapper_parsing_exception', 'No handler for type [string] declared on field [texts]'),我找到了一些他们说的解决方案:使用text而不是string在字段类型中,但它也出错了:elasticsearch.exceptions.RequestError: RequestError(400, 'mapper_parsing_exception', 'Failed to parse mapping [examplecase]: Could not convert [texts.index] to boolean'). The elasticsearch version iselasticsearch-6.5.4. How can I deal with it?
小智 7
这个
“索引”:“分析”或“索引”:“未分析”
是较旧的 elasticsearch 版本映射,不需要。
您需要做的就是对已分析的字符串字段使用“ text ”,对not_analyzed 文本字段使用“关键字”,如下所示:
es = Elasticsearch("localhost:9200")
request_body = {
"settings": {
"number_of_shards": 5,
"number_of_replicas": 1
},
'mappings': {
'examplecase': {
'properties': {
'tbl_id': {'type': 'keyword'},
'texts': {'type': 'text'},
}
}
}
}
es.indices.create(index='example_index', body=request_body)
Run Code Online (Sandbox Code Playgroud)
在此处查看 Elastic 文档中的参考:https : //www.elastic.co/guide/en/elasticsearch/reference/current/mapping.html