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

时间:2018-06-08 11:34:01

标签: spring elasticsearch spring-data spring-data-elasticsearch

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

我的文档定义如下:

@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

甚至是

  

马丁-INT

我得到0结果。当我发送“kib”作为参数时,它会正确返回包含单词“kib”的所有记录,但它不能使用特殊字符。 / - 等。我应该如何从java查询弹性搜索以获取包含我所需子字符串的所有记录?感谢

1 个答案:

答案 0 :(得分:0)

我发现默认情况下,elasticSearch analyzer会对您的查询进行标记。而不是“martin-int-vip.vs.cz:5080/kib”,它寻找一个包含martin和int和vip的字段......

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