• ElasticSerach(四)


    今天主要介绍ES API 

    1、准备工作

    1.1、创建 maven 工程引入依赖

            <!--Java操作ES的客户端工具Jest-->
            <dependency>
                <groupId>io.searchbox</groupId>
                <artifactId>jest</artifactId>
                <version>5.3.3</version>
            </dependency>
    
            <!--Jest需要的依赖-->
            <dependency>
                <groupId>net.java.dev.jna</groupId>
                <artifactId>jna</artifactId>
                <version>4.5.2</version>
            </dependency>
            <!--Jest需要的依赖-->
            <dependency>
                <groupId>org.codehaus.janino</groupId>
                <artifactId>commons-compiler</artifactId>
                <version>3.0.16</version>
            </dependency>
    
            <!-- ElasticSearch依赖 -->
            <dependency>
                <groupId>org.elasticsearch</groupId>
                <artifactId>elasticsearch</artifactId>
                <version>6.6.0</version>
            </dependency>
    
            <dependency>
                <groupId>org.apache.logging.log4j</groupId>
                <artifactId>log4j-to-slf4j</artifactId>
                <version>2.11.0</version>
            </dependency>

    1.2、编写方法获取 jest 连接

      //声明 jest 客户端工厂
      private var jestFactory: JestClientFactory = null;
    
      def build() = {
        jestFactory = new JestClientFactory
        jestFactory.setHttpClientConfig(new HttpClientConfig
        .Builder("http://hadoop201:9200") //ES 连接地址
          .multiThreaded(true) //开启多线程处理
          .maxTotalConnection(200) //对大连接数
          .connTimeout(10000) //链接等待时间
          .readTimeout(10000) //操作等待时间
          .build()
        )
      }
    
      //获取客户端
      def getJestClient(): JestClient = {
        //如果连接工厂为空,调用 build() 创建工厂,否则直接返回对象
        if (jestFactory == null) {
          //创建客户端工厂对象
          build();
        }
        jestFactory.getObject
      }
    

    2、ES 插入数据

    2.1、方式1 直接使用插入语句进行插入

     // ES 插入数据 方式一
      def putIndex() = {
        //获取客户端链接
        val client: JestClient = getJestClient()
        //定义执行的 source
        val source: String =
          """{
            |  "id":101,
            |  "name":"peration meigong river",
            |     "doubanScore": 8.1,
            |   "actorList":
            |   [
            |     {"id":1,
            |       "name":"liu yi fei"
            |     }]
            |}""".stripMargin
        //创建插入的index,Bulider 的参数表示要插入的文档对象,底层会转换为 JSON 对象,也可以传入封装后的眼里类对象
        val index: Index = new Index.Builder(source)
          .index("movie_index")
          .`type`("movie")
          .id("4")
          .build()
    
        //使用客户端对象操作ES,execute 的参数是 Action 类型,Index 是 Action  的实现类
        client.execute(index)
    
        //关闭链接
        client.close()
      }
    

    2.2、方式2 封装眼里类对象进行插入

    定义样例类

    //定义样例类
    case class Movie(id: Long, name: String, doubanScore: Float, actorList: util.List[util.Map[String, Object]]) {
    

    实现插入

     // ES 插入数据 方式二,封装眼里类对象 插入文档
      def putIndex1() = {
        //获取客户端链接
        val client: JestClient = getJestClient()
        val actorList = new util.ArrayList[util.Map[String, Object]]()
        val actorMap = new util.HashMap[String, Object]()
        actorMap.put("id", "01")
        actorMap.put("name", "殷桃")
        actorList.add(actorMap)
        //封装成样例类对象
        val movie: Movie = Movie(102, "人世间", 9.5f, actorList)
    
        //创建Action 实现类 Index
        val index: Index = new Index.Builder(movie) //放入样例类对象
          .index("movie_index")
          .`type`("movie")
          .id("5")
          .build()
    
    
        client.execute(index)
    
        //关闭链接
        client.close()
      }
    

    3、查询文档

    3.1、根据ID查询

      // 根据ID 查询数据
      def queryById() = {
        //获取客户端链接
        val client: JestClient = getJestClient()
        //设置需要查询的 index & id
        val get: Get = new Get.Builder("movie_index", "5").build()
        //获取返回值对象
        val result: DocumentResult = client.execute(get)
        //此处直接通过返回值对象的 getJsonString 方法进行输出
        println(result.getJsonString)
        //关闭连接
        client.close()
      }
    

    3.2、查询多个文档 方式1

      //   查询多个文档数据 方式1
      def queryDos() = {
        //获取客户端链接
        val client: JestClient = getJestClient()
        val query: String =
          """
            |{
            |  "query": {
            |    "match": {
            |      "name": "人"
            |    }
            |  },
            |  "sort": [
            |    {
            |      "doubanScore": {
            |        "order": "desc"
            |      }
            |    }
            |  ]
            |}
            |""".stripMargin
        //封装 search 对象
        val search: Search = new Search.Builder(query)
          .addIndex("movie_index")
          .build()
        val result: SearchResult = client.execute(search)
        val list: util.List[SearchResult#Hit[util.Map[String, Any], Void]] = result.getHits(classOf[util.Map[String, Any]])
        //将 java list  转为 scala 集合
        import scala.collection.JavaConverters._
        val list1: List[util.Map[String, Any]] = list.asScala.map(_.source).toList
        println(list1.mkString("\n"))
    
        //关闭连接
        client.close()
      }
    

    3.3、查询多个文档 方式2

      //   查询多个文档数据 方式2
      def queryDos1() = {
        //获取客户端链接
        val client: JestClient = getJestClient()
        //用于构建查询JSONM格式字符串
        val searchSourceBuilder: SearchSourceBuilder = new SearchSourceBuilder
        val boolQueryBuilder: BoolQueryBuilder = new BoolQueryBuilder()
        boolQueryBuilder.must(new MatchQueryBuilder("name", "人"))
        boolQueryBuilder.filter(new TermQueryBuilder("actorList.name", "殷桃"))
    
        searchSourceBuilder.query(boolQueryBuilder)
        searchSourceBuilder.from(0)
        searchSourceBuilder.size(1)
        searchSourceBuilder.sort("doubanScore", SortOrder.DESC)
    
        searchSourceBuilder.highlighter(new HighlightBuilder().field("name"))
    
        val query: String = searchSourceBuilder.toString()
        //  println(query)
    
        //封装 search 对象
        val search: Search = new Search.Builder(query)
          .addIndex("movie_index")
          .build()
        val result: SearchResult = client.execute(search)
        val list: util.List[SearchResult#Hit[util.Map[String, Any], Void]] = result.getHits(classOf[util.Map[String, Any]])
        //将 java list  转为 scala 集合
        import scala.collection.JavaConverters._
        val list1: List[util.Map[String, Any]] = list.asScala.map(_.source).toList
        println(list1.mkString("\n"))
    
        //关闭连接
        client.close()
      }

     

  • 相关阅读:
    Chrome---谷歌浏览器修改用户缓存文件夹 如何设置缓存路径
    Web移动端---iPhone X适配(底部栏黑横线)
    vue 项目使用 webpack 构建自动获取电脑ip地址
    vue+webpack项目打包后背景图片加载不出来问题解决
    免费苹果账号(apple id)申请ios证书p12真机调试
    将Vue移动端项目打包成手机app---HBuilder
    JS --- 本地保存localStorage、sessionStorage用法总结
    zTree & ckeditor &ValidateCode.jar 使用个人心得总结
    Java web实现综合查询+SQL语句拼接
    从小工到专家 2019.11.17
  • 原文地址:https://www.cnblogs.com/wdh01/p/16209423.html
Copyright © 2020-2023  润新知