elasticsearch,quotes,Spring,elasticsearch,Quotes" /> elasticsearch,quotes,Spring,elasticsearch,Quotes" />

具有特殊字符的Spring数据弹性搜索

具有特殊字符的Spring数据弹性搜索,spring,elasticsearch,quotes,Spring,elasticsearch,Quotes,作为我们项目的一部分,我们在弹性搜索的基础上使用Spring数据。 我们发现findBy查询存在非常有趣的问题。如果我们传递包含空格的字符串,除非我们用引号填充字符串,否则它找不到正确的元素。例如:对于getByName(字符串名),我们应该传递getByName(“\”John Do\”)。 有没有办法消除这种多余的填充?我正在尝试使用Spring(Boot Starter)数据的第一步,但遇到了与您相同的问题,只是在我的情况下出现了一个问题:那就是“一团糟”。我知道这是保留字符()的一部分。

作为我们项目的一部分,我们在弹性搜索的基础上使用Spring数据。 我们发现findBy查询存在非常有趣的问题。如果我们传递包含空格的字符串,除非我们用引号填充字符串,否则它找不到正确的元素。例如:对于getByName(字符串名),我们应该传递getByName(“\”John Do\”)。
有没有办法消除这种多余的填充?

我正在尝试使用Spring(Boot Starter)数据的第一步,但遇到了与您相同的问题,只是在我的情况下出现了一个问题:那就是“一团糟”。我知道这是保留字符()的一部分。你提到的报价正是我目前使用的解决方案。它会产生如下查询:

@Query(value = "{\"term\" : {\"name\" : \"?0\"}}")
List<Person> findByName(String name);
{
“from”:0,
“查询”:{
“布尔”:{
“必须”:{
“查询字符串”:{
“查询”:“John Do”,
“字段”:[“名称”]
}
}
}
}
}

(您可以在rest控制台或ElasticHQ中使用此选项来检查结果。) 一位同事建议切换到“术语”查询:

{
“from”:0,
“尺寸”:100,
“查询”:{
“期限”:{
“姓名”:“John Do”
} } }

可能有助于避免引用。我已经在您的存储库中的findByName方法上使用@Query注释尝试了这一点。事情会是这样的:

@Query(value = "{\"term\" : {\"name\" : \"?0\"}}")
List<Person> findByName(String name);
@Query(value=“{\'term\”:{\'name\”:\“?0\'}}”)
列出findByName(字符串名称);