使用Java API在Elasticsearch的所有字段中搜索多个字符串

 太阳神神神_890 发布于 2022-12-08 17:39

我有一个弹性搜索索引,用户的字段如..."name":"kai""age":"23""location":"Delhi,India""tag":["search","nosql"]等.

我想在用户的所有字段中查询多个字符串(例如.["nosql","delhi"]).是否可以使用Java API?

这是我正在使用的代码示例.(但这与问题无关)它只是为了知道我现在正在使用的对象.

BoolQueryBuilder queryBuilder = QueryBuilders.boolQuery()
                .must(QueryBuilders.matchAllQuery());
        if(location!=null) {
            queryBuilder.must(QueryBuilders.matchQuery("location",location));
        }
        BoolFilterBuilder filerBuilder=FilterBuilders.boolFilter();     
        for(String skill:skills){
            filerBuilder.must(FilterBuilders.rangeFilter("tags."+skill).from(0));
        }
        filerBuilder.must(FilterBuilders.queryFilter(queryBuilder));
        if(age!=null) {
            filerBuilder.must(FilterBuilders.rangeFilter("age").from(age[0]).to(age[1]));
        }
        SearchResponse response = client.prepareSearch("skillbin")
                .setTypes("stackdump")
                .setSearchType(SearchType.QUERY_AND_FETCH)
                .setQuery(queryBuilder)   
                .setPostFilter(filerBuilder)
                .addSort("reputation", SortOrder.DESC)
                .execute()
                .actionGet();
        SearchHits hits=response.getHits(); 

提前致谢.:)

1 个回答
  • 在Java API中,您可以查询"_all"字段,该字段默认包含文档的所有字段.另一种方法是使用MultiMatchQuery,它更灵活,允许您指定要查询的字段列表.

    下面是关于如何访问"_all"字段,以及如何创建一些示例代码MultiMatchQuery使用MultiMatchQueryBuilder和QueryBuilders.沿着查询的multiMatchQuery搜索所有字段:

    String queryString = "nosql delhi";
    
    String allField = "_all";
    
    MultiMatchQueryBuilder mmqb = QueryBuilders.multiMatchQuery(queryString, allField);
    

    2022-12-11 02:09 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有