手机版学校入驻客服中心网站导航

欢迎来到郑州百知教育!

咨询热线

Java学习路线 创建Java class

来源:郑州百知教育    时间:2022/12/9 17:27:35

  Java学习路线分享创建Java class,首先通过Transport Client获取ES的连接

  private Client client;

  //通过Transport Client获取ES的连接

  @Before

  public void getClient() throws Exception{

  //ES服务的JavaAPI的port为9300

  //注意:如果请求一个ES集群,可以多添几个节点

  //为了避免在一个节点出现网络问题导致的请求失败问题,可以自动切换另外一个节点

  client = TransportClient.builder().build()

  .addTransportAddress(new InetSocketTransportAddress(

  InetAddress.getByName("localhost"),9300));

  //.addTransportAddress(...);

  }

  操作命令

  ----------------------------------------新建文档------------------------------------

  1. 使用json来创建文档(插入一条数据),自动创建索引和映射

  @Test

  public void createDocument1(){

  // json格式的数据

  //json "需要转义 -> \

  String source = "{" +

  "\"id\":\"1\"," +

  "\"title\":\"Lucene是一套用于全文检索和搜寻的开源程式库\"," +

  "\"content\":\"Lucene提供了一个简单却强大的应用程式接口,能够做全文索引和搜寻\"" +

  "}";

  //创建文档, 定义索引名称,文档类型,主键标识ID

  //execute().actionGet() == get() 代表立刻执行

  IndexResponse indexResponse =

  client.prepareIndex("blog", "article", "1")

  .setSource(source).get(); //加载数据并触发

  this.getResponse(indexResponse); //对应下面封装信息

  client.close();

  }

  将打印信息封装成类,方便this调用

  //获取响应信息

  private void getResponse(IndexResponse indexResponse) {

  System.out.println("索引名称: " + indexResponse.getIndex());

  System.out.println("文档类型: "+indexResponse.getType());

  System.out.println("ID: "+indexResponse.getId());

  System.out.println("版本: "+indexResponse.getVersion());

  System.out.println("是否创建成功: "+indexResponse.isCreated());

  }

  2. 使用map创建文档,自动创建索引和映射

  @Test

  public void createDocument2(){

  // map类型的数据

  Map source = new HashMap<>();

  source.put("id","2");

  source.put("title","ElasticSearch");

  source.put("content","是一个分布式的 RESTful 风格的搜索和数据分析引擎");

  //创建文档

  IndexResponse indexResponse = client.prepareIndex("blog", "article", "2")

  .setSource(source).get();

  this.getResponse(indexResponse);

  client.close();

  }

  3. 使用ES帮助类(执行类),创建文档

  @Test

  public void createDocument3() throws Exception{

  XContentBuilder source = XContentFactory.jsonBuilder()

  .startObject() //封装数据

  .field("id","3")

  .field("title","ES的核心")

  .field("content","集中的是巴拉巴拉")

  .endObject();

  System.out.println(source.toString());

  //创建文档

  IndexResponse indexResponse = client.prepareIndex("blog", "article", "3")

  .setSource(source).get();

  this.getResponse(indexResponse);

  client.close();

  }

  ----------------------------------------搜索文档------------------------------------

  输出格式为json格式

  搜索文档数据 -- 单个索引 prepareGet

  @Test

  public void testGetData1(){

  GetResponse getResponse = client.prepareGet("blog", "article", "1").get();

  System.out.println(getResponse.getSourceAsString());

  client.close(); //输出格式为json格式

  }

  搜索文档数据 -- 多个索引 prepareMultiGet

  @Test

  public void testGetData2(){

  MultiGetResponse multiGetResponse = client.prepareMultiGet()

  .add("blog", "article", "1")

  .add("blog", "article", "2", "3")

  .get();

  for (MultiGetItemResponse itemResponse : multiGetResponse){

  GetResponse response = itemResponse.getResponse();

  if (response.isExists()){

  System.out.println(response.getSourceAsString());

  }

  }

  client.close();

  }

  ----------------------------------------更新文档------------------------------------

  doc更新

  创建更新对象

  @Test

  public void testUpdate1() throws Exception{

  UpdateRequest request = new UpdateRequest();

  request.index("blog");

  request.type("article");

  request.id("1");

  request.doc(XContentFactory.jsonBuilder() //doc 更新方法

  .startObject()

  .field("id","1")

  .field("title","更新:1")

  .field("content","更新:1")

  .endObject());

  UpdateResponse updateResponse = client.update(request).get();

  System.out.println("索引名称: " + updateResponse.getIndex());

  System.out.println("文档类型: "+updateResponse.getType());

  System.out.println("ID: "+updateResponse.getId());

  System.out.println("版本: "+updateResponse.getVersion());

  System.out.println("是否创建成功: "+updateResponse.isCreated()); //false

  client.close();

  }

  直接调用client.update

  @Test

  public void testUpdate2() throws Exception{

  UpdateResponse updateResponse =

  client.update(new UpdateRequest("blog", "article", "2")

  .doc(XContentFactory.jsonBuilder() //doc 更新方法

  .startObject()

  .field("id", "2")

  .field("title", "更新:2")

  .field("content", "更新:2")

  .endObject()))

  .get();

  System.out.println("索引名称: " + updateResponse.getIndex());

  System.out.println("文档类型: "+updateResponse.getType());

  System.out.println("ID: "+updateResponse.getId());

  System.out.println("版本: "+updateResponse.getVersion());

  System.out.println("是否创建成功: "+updateResponse.isCreated()); //false

  client.close();

  }

  创建并更新

  @Test

  public void testUpdate3() throws Exception{

  // 设置一个查询的条件,使用ID查询,如果查不到数据,则添加IndexRequest的文档数据

  IndexRequest indexRequest = new IndexRequest("blog1", "article", "4")

  .source(XContentFactory.jsonBuilder()

  .startObject()

  .field("id", "4")

  .field("title", "李雪静加油")

  .field("content", "Fighting!")

  .endObject());

  //设置更新的数据,使用ID查询,如果能查到,则更新UpdateRequest的数据

  UpdateRequest updateRequest = new UpdateRequest("blog1", "article", "4")

  .doc(XContentFactory.jsonBuilder()

  .startObject()

  .field("title", "new fighting~")

  .endObject())

  .upsert(indexRequest);

  UpdateResponse updateResponse = client.update(updateRequest).get();

  System.out.println("索引名称: " + updateResponse.getIndex());

  System.out.println("文档类型: "+updateResponse.getType());

  System.out.println("ID: "+updateResponse.getId());

  System.out.println("版本: "+updateResponse.getVersion());

  System.out.println("是否创建成功: "+updateResponse.isCreated()); //false

  client.close();

  }

  ----------------------------------------删除文档------------------------------------

  prepareDelete

  @Test

  public void deleteData(){

  DeleteResponse deleteResponse = client.prepareDelete("blog", "article", "3").get();

  System.out.println("索引名称: " + deleteResponse.getIndex());

  System.out.println("文档类型: "+deleteResponse.getType());

  System.out.println("ID: "+deleteResponse.getId());

  System.out.println("版本: "+deleteResponse.getVersion());

  System.out.println("是否删除成功: "+deleteResponse.isFound());

  client.close();

  }

  ----------------------------------------查询文档------------------------------------

  安装分词器之前的查询

  es提供了queryStringQuery查询

  针对多字短的query_string查询

  @Test

  public void testSearch(){

  SearchResponse searchResponse = client.prepareSearch("blog")

  .setTypes("article")

  //默认分词器只能查找单个字,并没有把中文进行分词,需要我们安装一个分词器,IK分词器

  .setQuery(QueryBuilders.queryStringQuery("更新"))

  .get();

  //获取数据的结果对象

  SearchHits hits = searchResponse.getHits();

  //获取命中次数

  System.out.println("查询的结果数据有"+hits.getTotalHits()+"条");

  //遍历所有数据

  Iterator iterator = hits.iterator();

  while (iterator.hasNext()){

  SearchHit hit = iterator.next();

  //获取整条数据

  System.out.println(hit.getSourceAsString());

  //获取单个字段

  System.out.println("id: "+ hit.getSource().get("id"));

  System.out.println("title: "+ hit.getSource().get("title"));

  System.out.println("content: "+ hit.getSource().get("content"));

  }

  client.close();

  }

联系方式

选择专业时,如果犹豫不定,不知道选择哪个比较好,敬请致电,专业的咨询老师会为你解答。

  • 报名热线:400-6263-721
  • 咨询老师:吴老师
  • 点击咨询:

常见问题

没有想要的答案?马上提问

电脑版|手机版

版权所有: 郑州天华信息技术有限公司