Elastic Search Java API 对token的多匹配查询前缀查询

Elastic Search Java API Multi match query prefix query on tokens

我正在寻找某种方式来使用 Elastic java api 中的 NativeSearchQueryBuilder 对我的索引执行搜索,但我想在搜索时添加以下内容。 索引详情:

  1. 过滤类型 EdgeNgram
  2. 白色 space 分词器

我正在寻找自动完成功能,所以在这里我想在多个字段上应用搜索关键字,但它应该使用前缀来提高性能,我还希望结果需要 returned 如果他们达到了我指定的页面限制,而不是继续搜索索引,即使它找到了足够的结果。

例如:"albert einstein" 在我的索引中,现在如果我搜索 "alb" 它应该 return 结果或者如果我搜索 "ein" 它应该 return结果。

    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")));