elasticsearch.exceptions.RequestError: RequestError(400, 'mapper_parsing_exception', '没有在字段 [texts] 上声明的类型 [string] 的处理程序')

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