Java整合ES基础查询

一、ES查询

1)查询全部文档(type在es高版本被移除,非必须):
match_all:

GET /#{索引名(可加*匹配多个索引)}/#{type名(可用,分隔匹配多个类型)}/_search
{
"query": { "match_all": {} }
}
  1. 查询与过滤(type在es高版本被移除,非必须)

match查询:

GET /#{索引名}/#{type名}/_search
{
"query": { 
    "match": {
        "#{字段名(即field名)}":"#{字段值}"
    }
}

multi_match查询:

GET /#{索引名}/#{type名}/_search
{
"query": { 
  "multi_match": 
    {
      "query":"#{字段值}",
      "fields":["#{字段名1}","#{字段名2}"]
  }
}
}

range查询:

GET /#{索引名}/#{type名}/_search
{
  "query": {
    "range": {
        "#{字段名}": {
            "gte": #{字段值大于等于}
        }
        "#{字段名}": {
            "ge": #{字段值大于}
        }
        "#{字段名}": {
            "le": #{字段值小于}
        }
        "#{字段名}": {
            "lte": #{字段值小于等于}
        }
    }
   }
}

term查询:

GET /#{索引名}/#{type名}/_search
{
"query": { 
    "term": {
        "#{字段名}":"#{字段值}"
    }
}

terms查询:

GET /#{索引名}/#{type名}/_search
{
"query": { 
    "terms": {
        "#{字段名}":"[#{字段值1},#{字段值1},]"
    }
}

二、基于jest中的searchbox的API查询方式

依赖包版本:io.searchbox:jest:6.3.1

1)通用查询:

public static final String INDEX_NAME = "...";
public static final String TYPE_NAME = "...";
BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();
String searchString =  new SearchSourceBuilder()
                .query(boolQueryBuilder)
                .toString();
Search search = new Search.Builder(searchString).addIndex(INDEX_NAME).addType(TYPE_NAME).build();
SearchResult searchResult;
try {
    searchResult = jestClient.execute(search);
    //查询成功
    if(searchResult.isSucceeded()){
    //do something with searchResult
    }
}catch(Exception e){
...
}

2)基于BoolQueryBuilder的子查询:

//查询
boolQueryBuilder.filter(QueryBuilders.termQuery(key, value));
//通配符查询
boolQueryBuilder.filter(QueryBuilders.wildcardQuery(key, "*" + value + "*"));
//范围小于查询
boolQueryBuilder.filter(QueryBuilders.rangeQuery(key).lt(value));
....

3)高亮

/**
 * 高亮富文本
 */
private static final String PRE = "<em>";
private static final String POST = "</em>";
/** * 高亮设置 
 * @Author cx 
 * @param searchSourceBuilder 
 * @return void 
 */
private void setHighlight(SearchSourceBuilder searchSourceBuilder){    
    //高亮    
    HighlightBuilder highlightBuilder = new HighlightBuilder();
    highlightBuilder.field(new HighlightBuilder.Field("字段一"));
    highlightBuilder.field(new HighlightBuilder.Field("字段二"));
    highlightBuilder.field(new HighlightBuilder.Field("字段三"));
    highlightBuilder.preTags(PRE).postTags(POST);
    searchSourceBuilder.highlighter(highlightBuilder);
}

4)排序

/**
* 排序参数设置 
* @Author cx 
* @param searchSourceBuilder 
* @param operator asc升序;desc降序
* @param paramValue 
* @return void 
*/
private void setSorterParam(SearchSourceBuilder searchSourceBuilder, String operator, String param) {     
    param = param + ".keyword";
    if (ASC.equals(operator)) {
        searchSourceBuilder.sort(param, SortOrder.ASC);
    } else if (DESC.equals(operator)) {
        searchSourceBuilder.sort(param, SortOrder.DESC);
    } else {
        //throw new Exception("sorter参数格式不正确");
    }
}

参考文档:

https://www.elastic.co/guide/cn/elasticsearch/guide/current/getting-started.html

https://laijianfeng.org/2018/08/23%E4%B8%AA%E6%9C%80%E6%9C%89%E7%94%A8%E7%9A%84ES%E6%A3%80%E7%B4%A2%E6%8A%80%E5%B7%A7-Java-API%E5%AE%9E%E7%8E%B0/

https://blog.csdn.net/laoyang360/article/details/79293493

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。