作为我们项目的一部分,我们在弹性搜索之上使用Spring Data。 我们发现findBy查询非常有趣。如果我们传递包含空格的字符串,除非我们用引号填充字符串,否则它找不到正确的元素。例如:对于getByName(String name),我们应该传递getByName(“\”John Do \“”)。 有没有办法消除这种冗余填充?
答案 0 :(得分:1)
我正在尝试使用Spring(Boot Starter)Data ES的第一步,偶然发现了与你相同的问题,只是在我的情况下它是:“搞砸了”。我已经知道这是保留字符(https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-query-string-query.html#_reserved_characters)的一部分。你提到的引用正是我现在使用的解决方案。它会产生如下查询:
{
"from": 0,
"query": {
"bool": {
"must": {
"query_string": {
"query": "\"John Do\"",
"fields": ["name"]
}
}
}
}
}
(您可以在休息控制台或ElasticHQ中使用它来检查结果。) 一位同事建议切换到“术语”查询:
{
"from": 0,
"size": 100,
"query": {
"term" : {
"name": "John Do"
}
}
}
可能有助于避免引用。我已经通过在存储库中的方法findByName上使用@Query注释来尝试这一点。它会是这样的:
@Query(value = "{\"term\" : {\"name\" : \"?0\"}}")
List<Person> findByName(String name);