如何从包含等特殊字符的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查询弹性搜索以获取包含我所需子字符串的所有记录?感谢
答案 0 :(得分:0)
我发现默认情况下,elasticSearch analyzer会对您的查询进行标记。而不是“martin-int-vip.vs.cz:5080/kib”,它寻找一个包含martin和int和vip的字段......
要查询这些类型的字段,您需要更改分析器的行为,或者您可以使用 elasticSearchTemplate 和Criteria来构建更灵活的查询。