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

Mos*_*she 5 quotes spring elasticsearch

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

Wiv*_*ani 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 中使用它来检查结果。)一位同事建议切换到“term”查询:

{ "from": 0, "size": 100, "query": { "term" : { "name": "John Do"
} } }

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

@Query(value = "{\"term\" : {\"name\" : \"?0\"}}")
List<Person> findByName(String name);
Run Code Online (Sandbox Code Playgroud)