Spring 数据查找包含特殊字符的子字符串

Spring Data find substring containing special characters

如何从 elasticsearch 中检索包含 等特殊字符的数据。 / - ... 使用 spring 数据 ?

我有这样定义的文档:

@Document(indexName = "audit-2018.135", type = "audit")
public class Trace {

    @Id
    private String id;

    @Field(type = FieldType.Text)
    private String uri;

    // setters & getters
}

我需要按字段 uri 从 elasticSearch 检索数据。

下面是数据的外观示例:

martin-int-vip.vs.cz:5080/kib/api/runtime/case/CASE0000000000324223

使用kibana时我可以使用:

uri: "martin-int-vip.vs.cz:5080/kib"

然后我取回上面包含所需子字符串的记录。

现在我需要从 java 实现相同的结果,但是在 spring 数据中它没有按预期工作。

我有这样定义的 elasticSearchRepository:

public interface TraceRepository extends ElasticsearchRepository<Trace, String> {    
    List<Trace> findByUriContaining(String uri);
}

当我使用参数 uri 调用方法 findByUriContaining 时:

martin-int-vip.vs.cz:5080\/kib

甚至这个

martin-int

我得到 0 个结果。当我发送 "kib" 作为参数时,它 returns 正确地包含单词 "kib" 的所有记录但是它不适用于像 . 这样的特殊字符。 / - 等等。我应该如何从 java 查询我的 elasticSearch 以获取包含我想要的子字符串的所有记录?谢谢

我发现默认情况下 elasticSearch 分析器会标记您的查询。它查找的不是 "martin-int-vip.vs.cz:5080/kib",而是包含 martin 和 int 以及 vip 的字段...

为了查询这类字段,您需要更改分析器的行为,或者您可以使用 elasticSearchTemplate 和 Criteria 来构建更灵活的查询。