我正在寻找一些方法,我想用Elastic javaapi中的NativeSearchQueryBuilder对我的索引执行搜索,但我想在搜索时添加以下内容。索引详细信息:
- 过滤器类型EdgeNgram
- 空白标记器
我正在寻找自动完成功能,所以在这里我想在多个字段上应用搜索关键字,但它应该使用前缀来提高性能,而且我希望如果结果达到我指定的页面限制,就需要返回结果,而不是继续搜索索引,即使它找到了足够的结果。
例如:"阿尔伯特·爱因斯坦"在我的索引中,现在如果我搜索"alb",它应该返回结果,或者如果我搜索了"ein",它也应该返回结果。
NativeSearchQueryBuilder sb = new NativeSearchQueryBuilder()
.withIndices(Constants.ES_INDEX_NAME)
//.withPageable(pageable)
.withSourceFilter(new FetchSourceFilterBuilder().withIncludes("id").build())
.withTypes(Constants.USERS_TYPE)
.withQuery(multiMatchQuery("alb", new String[]{"userFirstName","userLastName","userMobile", "userEmail"}))
.withFilter(boolQuery()
.must(termQuery("userCityName", "Chicago")));
请有人帮助我,如何添加前缀和限制到我的多匹配查询生成器。
您要查找的是match_phrase_prefix
int limit = 100; //Set your limit
NativeSearchQueryBuilder sb = new NativeSearchQueryBuilder()
.withIndices(Constants.ES_INDEX_NAME)
.withPageable(new PageRequest(0, limit))
.withSourceFilter(new FetchSourceFilterBuilder().withIncludes("id").build())
.withTypes(Constants.USERS_TYPE)
.withQuery(QueryBuilders.multiMatchQuery("alb", "userFirstName","userLastName","userMobile", "userEmail")
.type(MatchQueryBuilder.Type.PHRASE_PREFIX))
.withFilter(boolQuery()
.must(termQuery("userCityName", "Chicago")));