索引的创建
package cn.tedu.es.test;
/**
* 测试transport客户端连接es操作
* @author 在路上
*
*/
import java.net.InetAddress;
import java.net.InetSocketAddress;
import java.net.UnknownHostException;
import org.elasticsearch.action.admin.indices.create.CreateIndexRequestBuilder;
import org.elasticsearch.action.admin.indices.create.CreateIndexResponse;
import org.elasticsearch.client.AdminClient;
import org.elasticsearch.client.IndicesAdminClient;
import org.elasticsearch.client.transport.TransportClient;
import org.elasticsearch.common.settings.Settings;
import org.elasticsearch.common.transport.InetSocketTransportAddress;
import org.elasticsearch.transport.client.PreBuiltTransportClient;
import org.junit.Before;
import org.junit.Test;
public class EsTest {
/*
* 初始化一个连接对象
*/
private TransportClient client;
@Before
public void initClient() throws Exception{
//提供一个连接es的信息 ip:port
//准备一个配置对象,可以设置当前客户端连接的
//集群名称elasticsearch
Settings set=Settings.builder().put("cluster.name","elasticsearch").build();
client=new PreBuiltTransportClient(set);
//为client赋值 底层使用的prepare预包装,提供ip地址和端口
InetSocketTransportAddress ista1=
new InetSocketTransportAddress(
InetAddress.getByName("192.168.253.129"),
9300);//代码插件,客户端连接es使用的9300
InetSocketTransportAddress ista2=
new InetSocketTransportAddress(
InetAddress.getByName("192.168.253.130"),
9300);//代码插件,客户端连接es使用的9300
InetSocketTransportAddress ista3=
new InetSocketTransportAddress(
InetAddress.getByName("192.168.253.131"),
9300);//代码插件,客户端连接es使用的9300
//交给client使用的三个地址对象
//只要能联通一个节点就可以操作es
client.addTransportAddress(ista1);
client.addTransportAddress(ista2);
client.addTransportAddress(ista3);
}
//通过利用client对象操作索引相关
@Test
public void indexManage(){
//transportClient使用pre**实现方式,将所有
//访问的功能,都封装成单独的request和response对象
//首先需要在代码中封装对应功能的request对象,利用client请求和接收响应
//创建索引,需要先获取索引的管理对象
AdminClient admin=client.admin();
IndicesAdminClient indices=admin.indices();
//新建索引 看不到代码的请求方式 看不到url
//prepare前缀的方法都是获取一个request对象
CreateIndexRequestBuilder request = indices.prepareCreate("index07");
CreateIndexResponse response = request.get();//代码端才发起请求到es
response.isAcknowledged();
response.isShardsAcked();
response.remoteAddress();//看当前请求到底是哪个es节点返回的消息
//对索引的其它操作
indices.prepareDelete("11");
indices.prepareExists("11");
}
}
//文档操作
@Test
public void documentManage(){
/*//获取文档,索引名称,类型名,索引id
GetRequestBuilder request=client.prepareGet("index06","article","2");
//获取响应结果
GetResponse response=request.get();
//将获取的document所有数据封装了json字符串
response.getSource();
Map<String, Object> map = response.getSourceAsMap();
System.out.println("id"+map.get("id"));
//{id=2,title=java,content=ssffs}
String json=response.getSourceAsString();
System.out.println(json);*/
//删除document
//client.prepareDelete(index,type,id);
//新增document
//测试 如何从数据库获取product 利用客户端将数据写入es
Product p=new Product();
p.setProductCategory("123");
p.setProductDescription("dsfa");
p.setProductId("sdf");
p.setProductImgurl("sfd");
p.setProductName("三星固态");
p.setProductNum(55);
p.setProductPrice(55.5);
IndexRequestBuilder request02 = client.prepareIndex("index06", "product", p.getProductId());
//request中添加发送到索引的document内存数据
ObjectMapper mapper=new ObjectMapper();
try {
String pJson = mapper.writeValueAsString(p);
request02.setSource(pJson);
IndexResponse iResponse = request02.get();
} catch (Exception e) {
}
}
@Test
public void queryManage(){
//client调用创建的搜索条件query,设置分页进行搜索
MatchQueryBuilder query = QueryBuilders.matchQuery("productName", "三星");
//client调用搜索实现数据的获取
SearchRequestBuilder request = client.prepareSearch("index06");
//from 相当于sql分页查询的start起始位置
//size 相当于rows page=1 rows=5 0,5 page=2 rows=5 5,5
SearchResponse response = request.setQuery(query).setFrom(0).setSize(5).get();
SearchHits hits = response.getHits();
System.out.println(hits.totalHits);
System.out.println(hits.maxScore());
SearchHit[] hits2 = hits.getHits();
for (SearchHit hit : hits2) {
String json=hit.getSourceAsString();
System.out.println(json);
}
}
2.3页面搜索功能
package cn.tedu.search.config;
import java.net.InetAddress;
import java.util.List;
import org.elasticsearch.client.transport.TransportClient;
import org.elasticsearch.common.settings.Settings;
import org.elasticsearch.common.transport.InetSocketTransportAddress;
import org.elasticsearch.transport.client.PreBuiltTransportClient;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
/**
* 通过属性读取,封装es客户端
* transportclient提供给各个服务
* @author 在路上
*
*/
@Configuration
@ConfigurationProperties(prefix="easymall.es")
public class ESConfig {
//集群名称
private String clusterName;
//节点连接node信息
private List<String> nodes;
//初始化方法对象
@Bean
public TransportClient initTransportClient(){
try {
//提供一个连接es的信息 ip:port
//准备一个配置对象,可以设置当前客户端连接的
//集群名称elasticsearch
Settings set=Settings.builder().put("cluster.name",clusterName).build();
TransportClient client=new PreBuiltTransportClient(set);
for(String node:nodes){
//
String host=node.split(":")[0];
int port=Integer.parseInt(node.split(":")[1]);
InetSocketTransportAddress ista1=
new InetSocketTransportAddress(
InetAddress.getByName(host),
port);//代码插件,客户端连接es使用的9300
//交给client使用的三个地址对象
//只要能联通一个节点就可以操作es
client.addTransportAddress(ista1);
}
return client;
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
public String getClusterName() {
return clusterName;
}
public void setClusterName(String clusterName) {
this.clusterName = clusterName;
}
public List<String> getNodes() {
return nodes;
}
public void setNodes(List<String> nodes) {
this.nodes = nodes;
}
}
package cn.tedu.search.controller;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import com.jt.common.pojo.Product;
import cn.tedu.search.service.SearchService;
@RestController
public class SearchController {
@Autowired
private SearchService searchService;
@RequestMapping("search/manage/query")
public List<Product> searchByName(String query,Integer page,Integer rows){
return searchService.searchbyName(query,page,rows);
}
}
package cn.tedu.search.service;
import java.util.ArrayList;
import java.util.List;
import org.elasticsearch.action.search.SearchRequestBuilder;
import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.client.transport.TransportClient;
import org.elasticsearch.index.query.MatchQueryBuilder;
import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.search.SearchHit;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.jt.common.pojo.Product;
import com.jt.common.utils.MapperUtil;
@Service
public class SearchService {
@Autowired
private TransportClient client;
public List<Product> searchbyName(String text, Integer page, Integer rows) {
//创建query对象,封装查询条件mathquery
MatchQueryBuilder query = QueryBuilders.matchQuery("productName", text);
//根据分页条件创建请求request
SearchRequestBuilder request = client.prepareSearch("easymall");
request.setQuery(query).setFrom((page-1)*rows).setSize(rows);
//发送请求,获取结果集
SearchResponse response = request.get();
//解析 封装了hits的list结果集 每个元素中使用source反序列化product对象
SearchHit[] hits = response.getHits().getHits();
//准备一个空的list
List<Product> pList=new ArrayList<Product>();
for (SearchHit hit : hits) {
//index type version source
String pJson=hit.getSourceAsString();
try {
Product product = MapperUtil.MP.readValue(pJson, Product.class);
pList.add(product);
} catch (Exception e) {
e.printStackTrace();
return pList;
}
}
return pList;
}
}
rabbitmq的安装
下载[估计不行]https://editor.csdn.net/md/?not_checkout=1 看这个
https://www.rabbitmq.com/which-erlang.html
erl查看版本
ctrl 加 z退出
安装socat用最下边的方法【此方法有问题,小心你的虚拟机奔溃】
[root@localhost software]# yum -y install socat
会报错(报文件内容格式错误)
删除原有的文件:
rm -f /etc/yum.repos.d/CentOS-Base.repo
重新下载阿里的:
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
清理缓存:
yum clean all
如果上述方法没有解决,尝试下面:
删除yum.repos.d目录下所有文件
rm -f /etc/yum.repos.d/*
重新下载阿里的:
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
清理缓存:
yum clean all
如果还不行($releasever 是获取你centos的版本号的,例如我的centos的版本号为6.7,获取到的为6,但是已经找不到了,所以直接全局改成7即可)
cd /etc/yum.repos.d
vi CentOS-Base.repo
:%s/$releasever/7/g #将文件中$releasever全部改成7
yum clean all && yum makecache # 清除和缓存
.安装socat
socat支持多协议,用于协议处理,端口转发,rabbitmq依赖于socat,因此在安装rabbitmq前要安装socat。
由于默认的CentOS-Base.repo源中没有socat,所以 yum install socat会出现以下错误:No package socat available
epel是yum的一个软件源,里面包含了许多基本源里没有的软件
因此,这里安装epel阿里云源,下载新repo 到/etc/yum.repos.d/,根据系统版本选择执行
epel(CentOS7)
执行:wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
epel(CentOS6)
执行:wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-6.repo
开始安装socat :
yum install -y socat
正确安装socat
【erlang明明版本正确报错使用rpm -ivh --nodeps rabbitmq-server-3.6.5-1.noarch.rpm】
1.安装依赖环境
在线安装依赖环境:可能需要花费一些时间
yum install build-essential openssl openssl-devel unixODBC unixODBC-devel make gcc gcc-c++ kernel-devel m4 ncurses-devel tk tc xz
1
若安装提示:
warning: *:
Header V4 RSA/SHA256 Signature, key ID a14f4fca: NOKEY
1
2
解决的方法就是在rpm 语句后面加上 –force --nodeps
即原本为 rpm -ivh *.rpm 现在改成 rpm -ivh *.rpm --force --nodeps就可以了。nodeps的意思是忽视依赖关系。因为各个软件之间会有多多少少的联系。有了这两个设置选项就忽略了这些依赖关系,强制安装或者卸载.
2.安装Erlang
# 安装
rpm -ivh erlang-18.3-1.el7.centos.x86_64.rpm
1
2
3.安装RabbitMQ
# 安装
rpm -ivh socat-1.7.3.2-5.el7.lux.x86_64.rpm
# 安装
rpm -ivh rabbitmq-server-3.6.5-1.noarch.rpm
1
2
3
4
5
4.开启管理界面
# 开启管理界面
rabbitmq-plugins enable rabbitmq_management
1
2
5.注意了: 设置配置文件(有可能没有配置文件rabbitmq.config,我当时就是死活找不到这个文件),但是你下载rabbitmq的时候我提供了这个文件,将这个文件丢到这个目录下:
cd /etc/rabbitmq/
1
6.启动(注意关闭防火墙)
service rabbitmq-server start # 启动服务
service rabbitmq-server stop # 停止服务
service rabbitmq-server restart # 重启服务
mq的下载
https://github.com/rabbitmq/rabbitmq-server/releases/tag/v3.7.7
[root@localhost04 doc]# cd /usr/share/doc/rabbitmq-server-3.7.7/
[root@localhost04 rabbitmq-server-3.7.7]# cp rabbitmq.config.example /etc/rabbitmq/rabbitmq.config
不限制用户的ip地址,否则只允许本地登录
{loopback_users, []}
开启控制台
rabbitmq-plugins enable rabbitmq_management
启动的路径
/usr/lib/rabbitmq/bin
[root@localhost04 bin]# ./rabbitmq-server
## ##
## ## RabbitMQ 3.7.7. Copyright (C) 2007-2018 Pivotal Software, Inc.
########## Licensed under the MPL. See http://www.rabbitmq.com/
###### ##
########## Logs: /var/log/rabbitmq/rabbit@localhost04.log
/var/log/rabbitmq/rabbit@localhost04_upgrade.log
Starting broker...
效果