我有一个弹性搜索索引,用户的字段如..."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();
提前致谢.:)
在Java API中,您可以查询"_all"字段,该字段默认包含文档的所有字段.另一种方法是使用MultiMatchQuery,它更灵活,允许您指定要查询的字段列表.
下面是关于如何访问"_all"字段,以及如何创建一些示例代码MultiMatchQuery使用MultiMatchQueryBuilder和QueryBuilders.沿着查询的multiMatchQuery搜索所有字段:
String queryString = "nosql delhi"; String allField = "_all"; MultiMatchQueryBuilder mmqb = QueryBuilders.multiMatchQuery(queryString, allField);