69、Java API初步使用_员工管理案例:基于Java对员工信息进行复杂的搜索操作

搜索需求:
(1)搜索职位中包含technique的员工
(2)同时要求age在30到40岁之间
(3)分页查询,查找第一页

1、在restful api中

GET /company/employee/_search
{
  "query": {
    "bool": {
      "must": [
        {
          "match": {
            "position": "technique"
          }
        }
      ],
      "filter": {
        "range": {
          "age": {
            "gte": 30,
            "lte": 40
          }
        }
      }
    }
  },
  "from": 0,
  "size": 1
}

2、在java api中

package com.roncoo.es.score.first;

import java.net.InetAddress;

import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.client.transport.TransportClient;
import org.elasticsearch.common.settings.Settings;
import org.elasticsearch.common.transport.InetSocketTransportAddress;
import org.elasticsearch.common.xcontent.XContentFactory;
import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.search.SearchHit;
import org.elasticsearch.transport.client.PreBuiltTransportClient;

/**
 * 员工搜索应用程序
 * @author Administrator
 *
 */
public class EmployeeSearchApp {

    @SuppressWarnings({ "unchecked", "resource" })
    public static void main(String[] args) throws Exception {
        Settings settings = Settings.builder()
                .put("cluster.name", "elasticsearch")
                .build();
        
        TransportClient client = new PreBuiltTransportClient(settings)
                .addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("localhost"), 9300)); 
        
//      prepareData(client);
        executeSearch(client);
        
        client.close();
    
    }

    /**
     * 执行搜索操作
     * @param client
     */
    private static void executeSearch(TransportClient client) {
        SearchResponse response = client.prepareSearch("company")
                .setTypes("employee")
                .setQuery(QueryBuilders.matchQuery("position", "technique"))
                .setPostFilter(QueryBuilders.rangeQuery("age").from(30).to(40))
                .setFrom(0).setSize(1)
                .get();
        
        SearchHit[] searchHits = response.getHits().getHits();
        for(int i = 0; i < searchHits.length; i++) {
            System.out.println(searchHits[i].getSourceAsString()); 
        }
    }

    /**
     * 准备数据
     * @param client
     */
    private static void prepareData(TransportClient client) throws Exception {
        client.prepareIndex("company", "employee", "1") 
                .setSource(XContentFactory.jsonBuilder()
                        .startObject()
                            .field("name", "jack")
                            .field("age", 27)
                            .field("position", "technique software")
                            .field("country", "china")
                            .field("join_date", "2017-01-01")
                            .field("salary", 10000)
                        .endObject())
                .get();
        
        client.prepareIndex("company", "employee", "2") 
                .setSource(XContentFactory.jsonBuilder()
                        .startObject()
                            .field("name", "marry")
                            .field("age", 35)
                            .field("position", "technique manager")
                            .field("country", "china")
                            .field("join_date", "2017-01-01")
                            .field("salary", 12000)
                        .endObject())
                .get();
        
        client.prepareIndex("company", "employee", "3") 
        .setSource(XContentFactory.jsonBuilder()
                .startObject()
                    .field("name", "tom")
                    .field("age", 32)
                    .field("position", "senior technique software")
                    .field("country", "china")
                    .field("join_date", "2016-01-01")
                    .field("salary", 11000)
                .endObject())
        .get();
        
        client.prepareIndex("company", "employee", "4") 
        .setSource(XContentFactory.jsonBuilder()
                .startObject()
                    .field("name", "jen")
                    .field("age", 25)
                    .field("position", "junior finance")
                    .field("country", "usa")
                    .field("join_date", "2016-01-01")
                    .field("salary", 7000)
                .endObject())
        .get();
        
        client.prepareIndex("company", "employee", "5") 
        .setSource(XContentFactory.jsonBuilder()
                .startObject()
                    .field("name", "mike")
                    .field("age", 37)
                    .field("position", "finance manager")
                    .field("country", "usa")
                    .field("join_date", "2015-01-01")
                    .field("salary", 15000)
                .endObject())
        .get();
    }
    
}

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

推荐阅读更多精彩内容

  • 一. Java基础部分.................................................
    wy_sure阅读 3,845评论 0 11
  • 去年有段时间得空,就把谷歌GAE的API权威指南看了一遍,收获颇丰,特别是在自己几乎独立开发了公司的云数据中心之后...
    骑单车的勋爵阅读 20,732评论 0 41
  • 这部分主要是开源Java EE框架方面的内容,包括Hibernate、MyBatis、Spring、Spring ...
    杂货铺老板阅读 1,448评论 0 2
  • 1、面向对象的特征有哪些方面? 答:面向对象的特征主要有以下几个方面: -- 抽象:抽象是将一类对象的共同特征总结...
    ccc_74bd阅读 1,003评论 0 1
  • 断笔两个多月的时间,再提笔感觉有点困难,不知从何写起。 兜兜转转从七八月份一心想着找份事情做,到现在已经接受现实没...
    萌妈呀阅读 209评论 0 2