Spring 数据 api(包含或开头)不适用于具有通配符的 SPACE
Spring Data api (Containing or startwith) not working with SPACE which has wildcard
我正在使用 Elastic Search 和 Spring 数据。
我在存储库中有一个简单的方法:
findByUserNameContaining("a b");
由于 SPACE.
,此方法未给出预期结果
获取错误:
"Cannot constructQuery '"a b"'. Use expression or multiple clauses instead." EXCEPTION="org.springframework.dao.InvalidDataAccessApiUsageException: Cannot constructQuery '"a b"'. Use expression or multiple clauses instead.
由于 Space 而停止创建多个令牌。
我有映射:
"userName": {
"type": "string",
"index": "not_analyzed"
},
我很惊讶在映射 "index": "not_analyzed"
之后遇到这个问题。
请帮助我。
提前致谢!
实际上 Spring 数据 apis(包含或 startWith)不适用于 String 中的 space。我已经用 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);
您必须屏蔽空格:
findByUserNameContaining("a\ b");
在我的例子中,我只需要 url 对字符串进行编码,因此在搜索“a b”时只需对其进行编码,使其变为“a%20b”,然后将构建查询。
我使用的是最新的springboot 2.3版本*
这可以使用条件API
中的表达式方法来实现
在搜索文本周围使用 引号 以获得完全匹配
criteria.and(new Criteria("FieldName").expression("\"" + SEARCH_TEXT_WITH_SPACE + "\""));
外卡匹配的搜索文本周围带有 星号
criteria.and(new Criteria("FieldName").expression("*" + SEARCH_TEXT_WITH_SPACE + "*"));
我正在使用 Elastic Search 和 Spring 数据。
我在存储库中有一个简单的方法:
findByUserNameContaining("a b");
由于 SPACE.
,此方法未给出预期结果获取错误:
"Cannot constructQuery '"a b"'. Use expression or multiple clauses instead." EXCEPTION="org.springframework.dao.InvalidDataAccessApiUsageException: Cannot constructQuery '"a b"'. Use expression or multiple clauses instead.
由于 Space 而停止创建多个令牌。 我有映射:
"userName": {
"type": "string",
"index": "not_analyzed"
},
我很惊讶在映射 "index": "not_analyzed"
之后遇到这个问题。
请帮助我。 提前致谢!
实际上 Spring 数据 apis(包含或 startWith)不适用于 String 中的 space。我已经用 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);
您必须屏蔽空格:
findByUserNameContaining("a\ b");
在我的例子中,我只需要 url 对字符串进行编码,因此在搜索“a b”时只需对其进行编码,使其变为“a%20b”,然后将构建查询。
我使用的是最新的springboot 2.3版本*
这可以使用条件API
中的表达式方法来实现在搜索文本周围使用 引号 以获得完全匹配
criteria.and(new Criteria("FieldName").expression("\"" + SEARCH_TEXT_WITH_SPACE + "\""));
外卡匹配的搜索文本周围带有 星号
criteria.and(new Criteria("FieldName").expression("*" + SEARCH_TEXT_WITH_SPACE + "*"));