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

标签 search elasticsearch n-gram

我正在寻找某种方法,希望通过Elastic java api的NativeSearchQueryBuilder对索引执行搜索,但是我想在搜索时添加以下内容。
索引详细信息:

  • 过滤器类型EdgeNgram
  • 空格标记生成器

  • 我正在寻找自动完成功能,因此在这里我想在多个字段上应用搜索关键字,但应该使用前缀来提高性能,而且我希望如果结果达到我的指定页面限制而不是继续显示,则需要返回结果搜索索引,即使它找到足够的结果。

    例如:“albert einstein”在我的索引中,现在,如果我搜索“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")));
    

    关于search - Elastic Search Java API对 token 的多重匹配查询前缀查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42190698/

    相关文章:

    java - 使用 Google 搜索 API

    Php postgresql 搜索查询

    C++ 数组、函数和计数器

    elasticsearch - Elasticsearch:结合功能分数

    arrays - Flash AS3,如何使用整数键索引 HashMap

    mysql - 不可用碎片异常

    elasticsearch - 在容忍拼写错误的同时,我如何有效地找到某些文本中提到的所有人?

    python - 快速 n-gram 计算

    ElasticSearch 使用 ngram 术语的 "best match"而不是 "synonym"?

    text - 字符的序列预测?