Spring Data Elasticsearch 包含带空格的查询

5 java elasticsearch spring-data-elasticsearch

我有一个Port以 field命名的实体portName。我写了下面的Spring Data ES查询方法来进行containing查询:

List<Port> ports = portRepository.findByPortNameContaining(searchText);
Run Code Online (Sandbox Code Playgroud)

它工作正常,直到searchText不包含任何空格。如果是这样,我会收到以下错误:

"Cannot constructQuery '*\"sample port\"*'. Use expression or multiple clauses instead."
Run Code Online (Sandbox Code Playgroud)

当我尝试 Spring Data ESsearch方法时:

List<Port> ports = Lists.newArrayList(portRepository.search(
            queryStringQuery(searchText)
                    .field("portName")
    ));
Run Code Online (Sandbox Code Playgroud)

如果我有一个名为 的端口,则只有当完全是一个完整的单词Loui Kentucky时,我才能获得结果,例如searchTextLouiorKentucky或 )Loui Kentucky。同样的情况发生在analyzeWildcard

List<Port> ports = Lists.newArrayList(portRepository.search(
       boolQuery().should(queryStringQuery(searchText).analyzeWildcard(true).field("portName"))
    ));
Run Code Online (Sandbox Code Playgroud)

我想构造一个简单的包含查询,它也可以处理空格。没有模糊性。即使我搜索,搜索结果也应该出现i KasLoui Kentucky包含该子字符串时,搜索结果也应该出现。