全文检索工具elasticsearch:第三章: Java程序中的应用
搭建模块
创建二个项目
gmall-list-service的appliction.properties:
server.port=8073
spring.datasource.url=jdbc:mysql://localhost:3306/gmall?characterEncoding=UTF-8
spring.datasource.username=root
spring.datasource.password=rootmybatis.configuration.map-underscore-to-camel-case=true
mybatis.mapper-locations=classpath:mapper/*Mapper.xmlspring.dubbo.registry.protocol=zookeeper
spring.dubbo.registry.address=192.168.0.100:2181spring.dubbo.application.name=gmall-list-service
spring.dubbo.protocol.name=dubbo
spring.dubbo.base-package=com.javawxidspring.elasticsearch.jest.uris=http://192.168.0.100:9200logging.level.root=info
gmall-list-service的pom.xml:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>com.javawxid.gmall</groupId><artifactId>gmall-parent</artifactId><version>1.0-SNAPSHOT</version></parent><groupId>com.javawxid.gmall</groupId><artifactId>gmall-list-service</artifactId><version>0.0.1-SNAPSHOT</version><name>gmall-list-service</name><description>Demo project for Spring Boot</description><properties><java.version>1.8</java.version></properties><dependencies><dependency><groupId>com.javawxid.gmall</groupId><artifactId>gmall-service-util</artifactId><version>1.0-SNAPSHOT</version></dependency><dependency><groupId>com.javawxid.gmall</groupId><artifactId>gmall-api</artifactId><version>1.0-SNAPSHOT</version></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-elasticsearch</artifactId></dependency><!-- 导入Jest依赖 --><!-- https://mvnrepository.com/artifact/io.searchbox/jest --><dependency><groupId>io.searchbox</groupId><artifactId>jest</artifactId><version>5.3.3</version></dependency><!-- https://mvnrepository.com/artifact/net.java.dev.jna/jna --><dependency><groupId>net.java.dev.jna</groupId><artifactId>jna</artifactId><version>4.5.1</version></dependency></dependencies><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build></project>
其中jest和jna请将版本号,部分纳入gmall-parent中管理。spring-boot-starter-data-elasticsearch不用管理版本号,其版本跟随springboot的1.5.10大版本号。
gmall-list-web的appliction.properties:
server.port=8083spring.dubbo.registry.address=192.168.0.100:2181spring.dubbo.protocol.name=dubbo
spring.dubbo.application.name=gmall-list-web
spring.dubbo.base-package=com.javawxidspring.dubbo.consumer.timeout=600000
spring.dubbo.consumer.check=falsespring.thymeleaf.mode=LEGACYHTML5
spring.thymeleaf.cache=falselogging.level.root=info
gmall-list-web的pom.xml:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>com.javawxid.gmall</groupId><artifactId>gmall-parent</artifactId><version>1.0-SNAPSHOT</version></parent><groupId>com.javawxid.gmall</groupId><artifactId>gmall-list-web</artifactId><version>0.0.1-SNAPSHOT</version><name>gmall-list-web</name><description>Demo project for Spring Boot</description><properties><java.version>1.8</java.version></properties><dependencies><dependency><groupId>com.javawxid.gmall</groupId><artifactId>gmall-api</artifactId><version>1.0-SNAPSHOT</version></dependency><dependency><groupId>com.javawxid.gmall</groupId><artifactId>gmall-web-util</artifactId><version>1.0-SNAPSHOT</version></dependency></dependencies><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build></project>
2、 关于es 的java 客户端的选择
目前市面上有两类客户端
一类是TransportClient 为代表的ES原生客户端,不能执行原生dsl语句必须使用它的Java api方法。
另外一种是以Rest Api为主的missing client,最典型的就是jest。 这种客户端可以直接使用dsl语句拼成的字符串,直接传给服务端,然后返回json字符串再解析。
两种方式各有优劣,但是最近elasticsearch官网,宣布计划在7.0以后的版本中废除TransportClient。以RestClient为主。
所以在官方的RestClient 基础上,进行了简单包装的Jest客户端,就成了首选,而且该客户端也与springboot完美集成。
3、插入数据
PUT /movie_chn/movie/1 { "id":1, "name":"红海行动", "doubanScore":8.5, "actorList":[ {"id":1,"name":"张译"}, {"id":2,"name":"海清"}, {"id":3,"name":"张涵予"} ] } PUT /movie_chn/movie/2 { "id":2, "name":"湄公河行动", "doubanScore":8.0, "actorList":[ {"id":3,"name":"张涵予"} ] } PUT /movie_chn/movie/3 { "id":3, "name":"红海事件", "doubanScore":5.0, "actorList":[ {"id":4,"name":"张晨"} ] } |
4、在测试类中测试ES
package com.javawxid;import io.searchbox.client.JestClient;
import io.searchbox.core.Search;
import io.searchbox.core.SearchResult;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
import java.io.IOException;
import java.util.HashMap;
import java.util.List;@RunWith(SpringRunner.class)
@SpringBootTest
public class GmallListServiceApplicationTests {@AutowiredJestClient jestClient;@Testpublic void testEs() throws IOException {String query="{\n" +" \"query\": {\n" +" \"match\": {\n" +" \"actorList.name\": \"张译\"\n" +" }\n" +" }\n" +"}";Search search = new Search.Builder(query).addIndex("movie_chn").addType("movie").build();SearchResult result = jestClient.execute(search);List<SearchResult.Hit<HashMap, Void>> hits = result.getHits(HashMap.class);for (SearchResult.Hit<HashMap, Void> hit : hits) {HashMap source = hit.source;System.err.println("source = " + source);}}}
打印结果:
source = {doubanScore=8.5, es_metadata_id=1, name=红海行动, actorList=[{id=1.0, name=张译}, {id=2.0, name=海清}, {id=3.0, name=张涵予}], id=1.0}
source = {doubanScore=5.0, es_metadata_id=3, name=红海事件, actorList=[{id=4.0, name=张晨}], id=3.0}
source = {doubanScore=8.0, es_metadata_id=2, name=湄公河行动, actorList=[{id=3.0, name=张涵予}], id=2.0}
以上技术方面的准备就做好了。
全文检索工具elasticsearch:第三章: Java程序中的应用相关推荐
- 全文检索工具elasticsearch:第一章:理论知识
搜索 什么是搜索, 计算机根据用户输入的关键词进行匹配,从已有的数据库中摘录出相关的记录反馈给用户. 常见的全网搜索引擎,像百度.谷歌这样的.但是除此以外,搜索技术在垂直领域也有广泛的使用,比如淘宝. ...
- 第三章 Java Servlet基础
第三章 Java Servlet基础 3.6.2 转发 1.获得RequestDispatcher对象 2.RequestDispatcher对象调用forward()方法实现转发 请求转发工作原理 ...
- CoreJava 笔记总结-第三章 Java的基本程序设计结构
CoreJava 笔记总结 文章目录 CoreJava 笔记总结 第三章 Java的基本程序设计结构 数据类型 1. 整型 2. 浮点类型 3. char类型 4. boolean类型 变量与常量 1 ...
- Java并发编程 - 第三章 Java内存模型
前言: Java 线程之间的通信对程序员完全透明,内存可见性问题很容易困扰 Java 程序员,本章将揭开 Java 内存模型神秘的面纱. 一.Java 内存模型的基础 1.1 并发编程模型的两个关键问 ...
- 第三章. Java反射
第三章. Java反射 1. 反射 2. 反射接口 2.1获取Class方式: 2.2 获取成员变量并调用 2.3 获取成员方法并调用 2.4 获取构造方法并调用 2.5 获取父类信息 3. 反射应用 ...
- 全文检索工具elasticsearch
二 .全文检索工具elasticsearch 1 . lucene与elasticsearch 咱们之前讲的处理分词,构建倒排索引,等等,都是这个叫lucene的做的.那么能不能说这个lucene就是 ...
- 【JAVA编码专题】 JAVA字符编码系列三:Java应用中的编码问题
这两天抽时间又总结/整理了一下各种编码的实际编码方式,和在Java应用中的使用情况,在这里记录下来以便日后参考. 为了构成一个完整的对文字编码的认识和深入把握,以便处理在Java开发过程中遇到的各种问 ...
- unix系统编码 java_JAVA字符编码系列三:Java应用中的编码问题
这两天抽时间又总结/整理了一下各种编码的实际编码方式,和在Java应用中的使用情况,在这里记录下来以便日后参考. 为了构成一个完整的对文字编码的认识和深入把握,以便处理在Java开发过程中遇到的各种问 ...
- Java 程序中的多线程
在 Java 程序中使用多线程要比在 C 或 C++ 中容易得多,这是因为 Java 编程语言提供了语言级的支持.本文通过简单的编程示例来说明 Java 程序中的多线程是多么直观.读完本文以后,用户应 ...
- 使用comm在java程序中管理本地端口[回钦波:高级软件工程师]
使用comm在java程序中管理本地端口 最近在做电信项目,遇到一些专业性的问题,在这里和大家一起分享下comm包下的类及如何使用等问题: 在java程序中,为了实现同本地系统的硬件端口(RS-232 ...
最新文章
- Cuda编程学习(一)
- 2019年嵌入式开发系统详细分析告诉你是否还值得去学习
- ubuntu安装java8
- 单机装两个mysql_单机环境下安装多个MySQL服务器
- golang for 循环中使用协程的问题
- 不实用额外变量 交换_变量交换:巧用异或运算
- c语言推箱子代码_C语言烂大街的东西都学不会!C语言多关卡推箱子制作教程
- 总结并发编程常见面试题
- R VS Python, 你会选择谁呢?
- 职中计算机中级工考试,2015年中级职计算机考试基本知识点.doc
- python爬虫02 - 爬虫请求模块 request库 json数据
- Orcad Schematic常用功能
- HTML5的骨架是什么,HTML5 骨架
- 【区块链】开源社区发力区块链,超级账本会成就Linux一样的传奇吗?
- 攻防世界misc——misc1
- 门禁服务器故障怎样修复,门禁常见故障及解决方法
- 信号处理——Hilbert变换及谱分析
- 【从kitti开始自动驾驶】--5. GPS资料发布
- 实操手册:如何在GKE上部署HTTP(S) Load Balancer及容器应用程式
- Cnopendata国家基金项目数据简介