弹簧数据弹性搜索带有特殊字符

时间:2015-09-02 13:14:36

标签: spring elasticsearch quotes

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

1 个答案:

答案 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);