微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Java RestHighLevelClient - 弹性搜索 - 如何在 id 字段值中添加特殊字符“/”

如何解决Java RestHighLevelClient - 弹性搜索 - 如何在 id 字段值中添加特殊字符“/”

在弹性搜索中插入带有“/”的字段值时出现异常

代码

String id = "/EACVBSDSFASFA";

IndexRequest indexRequest = new IndexRequest(INDEX,TYPE,id).source(objectsMap);
                    IndexResponse indexResponse = restHighLevelClient.index(indexRequest,RequestOptions.DEFAULT);

异常:

Path part [/EACVBSDSFASFA] Couldn't be encoded: java.lang.IllegalArgumentException
java.lang.IllegalArgumentException: Path part [/EACVBSDSFASFA] Couldn't be encoded
at org.elasticsearch.client.RequestConverters$EndpointBuilder.encodePart(RequestConverters.java:1142)
at org.elasticsearch.client.RequestConverters$EndpointBuilder.addpathPart(RequestConverters.java:1104)
at org.elasticsearch.client.RequestConverters.endpoint(RequestConverters.java:704)
at org.elasticsearch.client.RequestConverters.index(RequestConverters.java:309)
at org.elasticsearch.client.RestHighLevelClient.internalPerformRequest(RestHighLevelClient.java:1761)
at org.elasticsearch.client.RestHighLevelClient.performRequest(RestHighLevelClient.java:1735)
at org.elasticsearch.client.RestHighLevelClient.performRequestAndParseEntity(RestHighLevelClient.java:1697)
at org.elasticsearch.client.RestHighLevelClient.index(RestHighLevelClient.java:929)
at 
.....
.....
Caused by: java.net.URISyntaxException: Illegal character in port number at index 30: 

解决方法

问题不是因为字段,而是因为您使用 / 作为 ID 的一部分。

我猜这是一个限制,以防止必须对 ID 进行编码的资源,例如http://localhost:9200/index/_type/%2FEACVBSDSFASFA,注意 / -> %2F 转换。

在任何情况下 - 首选网址安全 ID,例如:

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。