elasticsearch,Java,elasticsearch" /> elasticsearch,Java,elasticsearch" />

Java 更新索引对象值时,双引号引发异常

Java 更新索引对象值时,双引号引发异常,java,elasticsearch,Java,elasticsearch,我试图使用更新脚本更新索引,若索引对象值有双引号,我将得到异常 使用以下代码: Employee employee = Employee(); employee.setId(16661L); employee.setEmployeeId(11026L); employee.setEmployeeName("Ashok"s Kumar"); employee.setEmailId("ashokkumar@yahoo.com"); final StringBuilder updateScript

我试图使用更新脚本更新索引,若索引对象值有双引号,我将得到异常

使用以下代码:

Employee employee = Employee();
employee.setId(16661L);
employee.setEmployeeId(11026L);
employee.setEmployeeName("Ashok"s Kumar");
employee.setEmailId("ashokkumar@yahoo.com");

final StringBuilder updateScript = new StringBuilder("ctx._source.employees.add("
                + employee + ");");

final UpdateRequestBuilder request = CLIENT.prepareUpdate(indexName, String.valueOf("88"), "14344");
final UpdateResponse response = request.setScript(updateScript.toString()).execute().actionGet();
执行此操作时,会出现以下异常:

线程“main”org.elasticsearch.ElasticSearchIllegalArgumentException中出现异常:无法执行脚本 位于org.elasticsearch.action.update.UpdateHelper.prepare(UpdateHelper.java:124) 位于org.elasticsearch.action.update.UpdateHelper.prepare(UpdateHelper.java:60) 在org.elasticsearch.action.update.TransportUpdateAction.shardOperation(TransportUpdateAction.java:187)上 在org.elasticsearch.action.update.TransportUpdateAction.shardOperation(TransportUpdateAction.java:183)上 在org.elasticsearch.action.update.TransportUpdateAction.shardOperation(TransportUpdateAction.java:63)上 位于org.elasticsearch.action.support.single.instance.TransportInstanceSingleOperationAction$AsyncSingleAction$1.run(TransportInstanceSingleOperationAction.java:191) 位于java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886) 位于java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908) 运行(Thread.java:662) 原因:[错误:未终止的字符串文字] [近:{……umar”,“emailId”:”ashokkumar@yahoo.com"}); ....}] ^ [第1行第250列] 在org.elasticsearch.common.mvel2.util.ParseTools.balancedCapture(ParseTools.java:1395)上
有人对此有解决办法吗?

请尝试更换

employeeName = employeeName.replace("\"", "\\\"");

我已经尝试过这个替换,但它不起作用。在我的代码中,Employee对象Employee Name字段有双引号。如果我们也替换,更新脚本将采用这种格式ctx.\u source.projectPeople.add({“id”:16661,“employeeId”:11026,“employeeName”:“Ashok\\”s Kumar,“emailId”:”akil@berijam.com" }); 因此,employeeName获得“Ashok\\”只有这样才能获得异常。