NativeSearchQueryBuilder

NativeSearchQueryBuilder

我有一个存储库方法,对字段userAccount.userName进行“开头为”(前缀)查询。当我搜索没有空格的字符串时,它将返回正确的结果。但是,当我搜索其中带有空格的字符串时,它将引发异常。

我的存储库方法:

public List<EsUser> findByUserAccountUserNameStartingWith(String term);



异常(exception):

最佳答案

使用通配符(例如*)的对Elasticsearch的查询必须是单个 token 。默认情况下, token 按空格分隔。 “汤姆·克鲁斯”是两个象征。

如果您需要包括多个 token ,请考虑实现自定义Spring Data ES存储库,并使用以下Elasticsearch API QueryBuilder。像这样:

NativeSearchQueryBuilder nativeSearchQueryBuilder = new NativeSearchQueryBuilder();

QueryBuilder matchPhraseQuery = QueryBuilders.matchPhrasePrefixQuery("userName", "Tom Cruise");

QueryBuilder nestedQuery = QueryBuilders.nestedQuery("userAccount", matchPhraseQuery);

nativeSearchQueryBuilder.withQuery(nestedQuery);

NativeSearchQuery nativeSearchQuery = nativeSearchQueryBuilder.build();

//auto wire elastic search template
FacetedPage<EsUser> results = template.queryForPage(nativeSearchQuery, EsUser.class);

10-07 13:04