代码之家  ›  专栏  ›  技术社区  ›  Martin Čuka

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

  •  0
  • Martin Čuka  · 技术社区  · 8 年前

    如何从包含特殊字符的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
    }
    

    我需要按字段从ElasticSearch检索数据 尿嘧啶尿路感染 .

    下面是一个数据的外观示例:

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

    使用Kibana时,我可以使用:

    uri:“马丁国际贵宾vs.cz:5080/kib”

    我得到了上面包含所需子字符串的记录。

    现在,我需要从Java中实现同样的结果,但是在Spring数据中它并不像预期的那样工作。

    我的elasticsearchrepository定义如下:

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

    当我调用方法时 发现Yuricontaining 带参数 尿嘧啶尿路感染 AS:

    马丁国际贵宾vs.cz:5080\/kib

    甚至这个

    马丁特

    我得到0个结果。当我发送“kib”作为参数时,它会正确地返回包含单词“kib”的所有记录,但是它不能处理像这样的特殊字符。我应该如何从Java查询我的弹性搜索来获取包含我想要的子串的所有记录?谢谢

    1 回复  |  直到 8 年前
        1
  •  0
  •   Martin Čuka    8 年前

    我发现默认情况下,elasticsearch分析器会标记您的查询。它不是“martin int vip.vs.cz:5080/kib”,而是寻找一个包含martin、int和vip的字段……

    为了查询这些类型的字段,您需要更改Analyzer的行为,或者可以使用 弹性搜索模板 以及建立更灵活查询的条件。