`` 我将我的elasticsearch升级到8.9,同时使用elasticsearch客户端创建文档时遇到以下错误
co.elastic.clients.json.JsonpMappingException:反序列化co.elastic.clients.elasticsearch._types.analysis.NGramTokenFilter时出错:未知字段“token_chars”(JSON路径:settings.index.analysis.filter.nGram_filter.token_chars)
虽然索引是在 kibana 上使用相同的映射创建的,但我希望它仅从 elasticsearch 客户端创建
`{
"mappings" :
{
"properties": {
"suggestion": {
"type": "text",
"fields": {
"analyzed": {
"type": "text",
"analyzer": "nGram_analyzer",
"search_analyzer": "whitespace"
}
}
},
"weight": {
"type": "integer"
}
}
},
"settings" :
{
"number_of_shards": 1,
"number_of_replicas": 1,
"max_ngram_diff" : 20,
"index": {
"analysis": {
"analyzer": {
"nGram_analyzer": {
"type": "custom",
"tokenizer": "whitespace",
"filter": [
"lowercase",
"asciifolding",
"nGram_filter"
]
}
},
"filter": {
"nGram_filter": {
"type": "ngram",
"min_gram": 2,
"max_gram": 20,
"token_chars": [
"letter",
"digit",
"punctuation",
"symbol"
]
}
}
}
}
}
}
我测试了你的映射和设置,它工作正常。
您看到的错误消息表明 Elasticsearch 客户端在反序列化 NGramTokenFilter 时遇到问题,因为存在未知字段
token_chars
。这可能是由于 Elasticsearch 版本与您使用的客户端版本不匹配所致。
token_chars
字段是NGramTokenFilter的一部分,它应该被客户端识别。如果不是,可能是您使用的客户端版本不支持该字段或者客户端存在错误。
检查您的客户端的兼容性。 https://www.elastic.co/guide/en/elasticsearch/client/java-rest/current/java-rest-high-compatibility.html
根据 Elasticsearch 的 Java 规范来源,NGramTokenFilter 没有 tokenChars 字段,但是,NGramTokenizer 中存在该字段。我可以假设您需要标记器。分词器分割输入的分词,过滤器过滤生成的分词。您可以编写自定义分词器,将分词器与过滤条件结合起来。