• elasticsearch java API


    1、连接elasticseach
    public class ElasticSearchComponent {
    
        TransportClient client = null;
    
        public ESClientSettings() {
            Settings settings = ImmutableSettings.settingsBuilder()
                    .put("client.transport.sniff", true).build();
            client = new TransportClient(settings);
        }
    
        public void connect() {
            client.addTransportAddress(new InetSocketTransportAddress("localhost", 9300));
        }
    
        public void close(){
            client.close();
        }
    
    }

    2、创建索引
    1.1、方法1
    public void createIndex(){
    try{
    String json = "{"title":"this","description":"descript","createDate":new Date()}";
            IndexResponse response = client.prepareIndex("test_index", "test_type")
    .setSource(json)
    .execute()
    .actionGet();
    }catch (Exception e){
    e.printStackTrace();
    }
    }

    1.2、方法2
    public void createIndex() {
    try {
    XContentBuilder doc = XContentFactory.jsonBuilder()
    .startObject()
    .field("title", "this")
    .field("description", "descript")
    .field("createDate", new Date())
    .endObject();
    client.prepareIndex("product_index", "product_type", "1").setSource(doc).execute().actionGet();
    } catch (IOException e) {
    e.printStackTrace();
    }
    }

    3、查询(索引(数据库):animal_index,类型(表):cat_type)

    3.1、根据ID进行单个查询
    GetResponse response = client.prepareGet("animal_index", "cat_type", "1")
                    .setOperationThreaded(false)
                    .get();
    
    
    3.2、分页查询所有记录
    QueryBuilder qb=new MatchAllQueryBuilder();
    SearchResponse response= client.prepareSearch("animal_index").setTypes("cat_type").setQuery(qb).setFrom(0)
    .setSize(100).get();
    SearchHits searchHits = response.getHits();
    for(SearchHit hit:searchHits.getHits()){
    logger.log(Level.INFO , hit.getSourceAsString());
    }
    相当于查询关系型数据库:sql select * from animal_index.cat_type limit 100;
    
    
    3.3、根据多条件组合与查询
    QueryBuilder qb=QueryBuilders.boolQuery().must(QueryBuilders.termQuery("skin","yellow")).must(QueryBuilders.termQuery("age",2)) ;
    SearchRequestBuilder sv=client.prepareSearch("animal_index").setTypes("cat_type").setQuery(qb).setFrom(0)
    .setSize(100);
    logger.log(Level.INFO,sv.toString());
    SearchResponse response= sv.get();
    SearchHits searchHits = response.getHits();
    for(SearchHit hit:searchHits.getHits()){
    logger.log(Level.INFO , hit.getSourceAsString());
    }
    相当于查询关系型数据库:select * from animal_index.cat_type where skin='yellow' and age=2
    
    
    3.4、多条件或查询
    QueryBuilder qb=QueryBuilders.termQuery("user","tom-1");
    QueryBuilder qb1=QueryBuilders.termQuery("user","tom-2");
    SortBuilder sortBuilder=SortBuilders.fieldSort("age");
    sortBuilder.order(SortOrder.DESC);
    QueryBuilder s=QueryBuilders.boolQuery().should(qb).should(qb1);//.must(qb5);
    SearchRequestBuilder sv=client.prepareSearch("animal_index").setTypes("cat_type").setQuery(s).addSort(sortBuilder).setFrom(0)
    .setSize(100);
    logger.log(Level.INFO,sv.toString());
    SearchResponse response= sv.get();
    SearchHits searchHits = response.getHits();
    for(SearchHit hit:searchHits.getHits()){
    logger.log(Level.INFO , hit.getSourceAsString());
    }
    相当于查询关系型数据库:select * from animal_index.cat_type where user='tom-1' or  user='tom-2';
    
    
    3.5、范围查询 
    // RangeQueryBuilder rangeQueryBuilder = QueryBuilders.rangeQuery("age").from(30,true).to(30,true);
    // RangeQueryBuilder rangeQueryBuilder = QueryBuilders.rangeQuery("age").gt(30 );
    RangeQueryBuilder rangeQueryBuilder = QueryBuilders.rangeQuery("age").gte(30 );
    QueryBuilder s=QueryBuilders.boolQuery().must(rangeQueryBuilder);//.must(qb5);
    SearchRequestBuilder sv=client.prepareSearch("animal_index").setTypes("cat_type").setQuery(s).setFrom(0)
    .setSize(100);
    logger.log(Level.INFO,sv.toString());
    SearchResponse response= sv.get();
    SearchHits searchHits = response.getHits();
    for(SearchHit hit:searchHits.getHits()){
    logger.log(Level.INFO , hit.getSourceAsString());
    }
    相当于查询关系型数据库;select * from animal_index.cat_type where age >=30 and age<=30;
    
    
    3.6、包含查询
    List<String> strs=new ArrayList<>();
    strs.add("tom-1");
    strs.add("tom-2");
    strs.add("tom-3");
    QueryBuilder qb=QueryBuilders.termsQuery("user",strs);
    SearchRequestBuilder sv=client.prepareSearch("animal_index").setTypes("cat_type").setQuery(qb).setFetchSource("age",null).setFrom(0)
    .setSize(100);
    logger.log(Level.INFO,sv.toString());
    SearchResponse response= sv.get();
    SearchHits searchHits = response.getHits();
    for(SearchHit hit:searchHits.getHits()){
    logger.log(Level.INFO , hit.getSourceAsString());
    }
    相当于查询关系型数据库;select age from animal_index.cat_type where user in ('tom-1','tom-2','tom-3');
    
    
    3.7、专门按id进行的包含查询
    QueryBuilder qb=QueryBuilders.idsQuery(1+"");
    SearchRequestBuilder sv=client.prepareSearch("animal_index").setTypes("cat_type").setQuery(qb).setFetchSource("age",null).setFrom(0)
    .setSize(100);
    logger.log(Level.INFO,sv.toString());
    SearchResponse response= sv.get();
    SearchHits searchHits = response.getHits(); 
    for(SearchHit hit:searchHits.getHits()){
    logger.log(Level.INFO , hit.getSourceAsString());
    }
    相当于查询关系型数据库;select age from animal_index.cat_type where id in ('1');
    
    
    3.8、按通配符查询
    QueryBuilder qb = QueryBuilders.wildcardQuery("user", "t*m*");
    //Fuzziness fuzziness=Fuzziness.fromEdits(2);
    //QueryBuilder qb = QueryBuilders.fuzzyQuery("user","om").fuzziness(fuzziness);
    //QueryBuilder qb = QueryBuilders.prefixQuery("user", "tom-2");
    SearchRequestBuilder sv=client.prepareSearch("animal_index").setTypes("cat_type").setQuery(qb).setFetchSource("user",null).setFrom(0)
    .setSize(100);
    logger.log(Level.INFO,sv.toString());
    SearchResponse response= sv.get();
    SearchHits searchHits = response.getHits();
    for(SearchHit hit:searchHits.getHits()){
    logger.log(Level.INFO , hit.getSourceAsString());
    }
    通配符查询像我们sql里的like

    3.8、match_parse查询
    3.8.1、match_parse查询相当于结构化数据库模糊查询like 。
    例子: "我是中学生" 伪代码match_parse("一个") 会对查询字符串分词[一,个]。同时需要有"一个"才会被搜索出来

    
    

    3.8.2、match_parse与match区别
    match查询只有包含"一"或者"个"或者"一个"都会被搜索出来。这是与match_parse比较大区别

     

    4、修改

    4.1、传入json字符串更新
    public void testUpdate() { JSONObject json = new JSONObject(); json.put("name", "李四"); json.put("age", "20"); json.put("sex", "男"); json.put("grade", "高二"); UpdateResponse response = client.prepareUpdate("stu_index", "stu_type", "id_000001").setDoc(json.toJSONString(), XContentType.JSON).get(); }

    5、删除索引数据

    5.1、根据条件删除
    public void delbyquery(){ QueryBuilder query = QueryBuilders.fieldQuery("type", "1"); client.prepareDeleteByQuery("productindex").setQuery(query).execute().actionGet(); }
    5.2、根据ID删除 public void delbyid(){ DeleteResponse response = client.prepareDelete("productindex", "productindex", "1") .execute() .actionGet(); }
  • 相关阅读:
    centos7安装zabbix3.4
    Linux修改网卡名称enss33到eth0--Ubuntu16和centos7
    记一次zabbix server挂掉的事件
    angularJs 技巧总结及最佳实践
    Yii2中的format
    本博客停止更新,新内容在个人网站上
    说下browserslist
    Yii2 软删除
    vue-webpack-boilerplate分析
    Node总结 模块机制
  • 原文地址:https://www.cnblogs.com/chenweichu/p/12035805.html
Copyright © 2020-2023  润新知