Spring Data api(包含或开头)不适用于具有通配符的 SPACE



我正在使用带有Spring Data的弹性搜索。

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

findByUserNameContaining("a b");

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

获取错误:

"无法构造查询 ''a b''。请改用表达式或多个子句。EXCEPTION="org.springframework.dao.InvalidDataAccessApiUsageException: 无法构造查询 '"a b">'.请改用表达式或多个子句。

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

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

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

请帮助我。提前感谢!

实际上 Spring 数据 apis(包含或开始(不适用于字符串中的空格。我已经用弹性核心 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 + "*"));

相关内容

  • 没有找到相关文章

最新更新