一尘不染

Spring Data API(Containing或Startwith)无法与具有通配符的SPACE一起使用

elasticsearch

我正在对Spring Data使用Elastic Search。

我在存储库中有一个简单的方法:

findByUserNameContaining("a b");

由于SPACE,此方法未给出预期结果。

错误获取:

“无法构造查询’ “ a b” ‘。请使用表达式或多个子句。EXCEPTION =“
org.springframework.dao.InvalidDataAccessApiUsageException:无法构造查询’ ” a b“
‘,请使用表达式或多个子句。

用于由于空间而停止创建多个令牌。我有映射:

"userName": {
    "type": "string",
    "index": "not_analyzed"
},

"index": "not_analyzed"在映射后遇到这个问题,我感到非常惊讶。

请帮我。提前致谢!


阅读 443

收藏
2020-06-22

共1个答案

一尘不染

实际上,Spring数据API(包含或startWith)不适用于String中的空间。我已经用Elastic core api实现了相同的功能。

NativeSearchQueryBuilder aNativeSearchQueryBuilder = new NativeSearchQueryBuilder();
        aNativeSearchQueryBuilder.withIndices(indexName).withTypes(type);
        final BoolQueryBuilder aQuery = new BoolQueryBuilder();

            aQuery.must(QueryBuilders.queryStringQuery("a b").defaultField("UserName"));

NativeSearchQuery nativeSearchQuery = aNativeSearchQueryBuilder.withQuery(aQuery).build();
        List<Object> aDatas = elasticsearchTemplate.queryForList(nativeSearchQuery, Object.class);
2020-06-22