windows下操作elasticsearch
程序员文章站
2022-06-21 14:23:06
...
elasticsearch6.X以上需要jdk1.8,本教程适用6.X
安装
安装: https://www.cnblogs.com/hts-technology/p/8477258.html
分词器下载:https://github.com/medcl/elasticsearch-analysis-ik/releases
在安装文件夹的plugins文件夹下面新建analysis-ik文件夹,把分词器压缩文件解压放进去
mysql数据同步到elasticsearch
logstash插件可以定时单向同步数据到elasticsearch
logstash安装
下载地址:https://www.elastic.co/downloads/logstash
选择对应版本,下载后直接解压即可
设置内存大小
启动:bin/logstash.bat 双击运行
数据同步
1、准备mysql驱动包:mysql-connector-java-5.1.26.jar
2、在bin文件夹下新建文件夹mysql,驱动包放里面
在bin文件夹下新建文件夹conf
新建配置文件:popu_info.conf
input {
jdbc {
jdbc_driver_library => ".\mysql\mysql-connector-java-5.1.26.jar"
jdbc_driver_class => "com.mysql.jdbc.Driver"
jdbc_connection_string => "jdbc:mysql://192.0.0.77:3306/pt_zongzhi"
jdbc_user => "root"
jdbc_password => "123456"
schedule => "* * * * *"
statement => "select * from popu_info where PUPDATETIME > :sql_last_value"
last_run_metadata_path => "syncpoint_popu_info"
}
}
output {
elasticsearch {
index => "popu_info"
document_id => "%{pid}" # 用数据库表哪个字段标识更新字段
hosts => "localhost:9200"
}
}
配置文件说明
input:
dbc_driver_library: jdbc mysql 驱动的路径,在上一步中已经下载
jdbc_driver_class: 驱动类的名字,mysql 填 com.mysql.jdbc.Driver 就好了
jdbc_connection_string: mysql 地址
jdbc_user: mysql 用户
jdbc_password: mysql 密码
schedule: 执行 sql 时机,类似 crontab 的调度,最低频率1分钟
statement: 要执行的 sql,以 “:” 开头是定义的变量,可以通过 parameters 来设置变量,这里的 sql_last_value 是内置的变量,表示上一次 sql 执行中 update_time 的值,这里 update_time 条件是 >= 因为时间有可能相等,没有等号可能会漏掉一些增量
use_column_value: 使用递增列的值
tracking_column_type: 递增字段的类型,numeric 表示数值类型, timestamp 表示时间戳类型
tracking_column: 递增字段的名称,这里使用 update_time 这一列,这列的类型是 timestamp
last_run_metadata_path: 同步点文件,这个文件记录了上次的同步点,重启时会读取这个文件,这个文件可以手动修改
output:
hosts: es 集群地址
user: es 用户名
password: es 密码
index: 导入到 es 中的 index 名,这里我直接设置成了 mysql 表的名字
document_id: 导入到 es 中的文档 id,这个需要设置成主键,否则同一条记录更新后在 es 中会出现两条记录,%{pid} 表示引用 mysql 表中 id 字段的值
3、修改config/pipelines.yml文件
在最后一行加入
- pipeline.id: popu_info
path.config: ..\bin\conf\popu_info.conf
几个表就写几个配置文件
java操作elasticsearch
- 引入jar
<!-- 原生 -->
<dependency>
<groupId>org.elasticsearch</groupId>
<artifactId>elasticsearch</artifactId>
<version>6.6.1</version>
</dependency>
<dependency>
<groupId>org.apache.lucene</groupId>
<artifactId>lucene-queryparser</artifactId>
<version>4.2.0</version>
</dependency>
<!-- transport客户端 -->
<dependency>
<groupId>org.elasticsearch.client</groupId>
<artifactId>transport</artifactId>
<version>6.6.1</version>
</dependency>
<dependency>
<groupId>org.elasticsearch.plugin</groupId>
<artifactId>transport-netty4-client</artifactId>
<version>6.6.1</version>
</dependency>
<!--elasticsearch和springboot结合-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-elasticsearch</artifactId>
</dependency>
- 实例化客户端对象
在启动类下添加,my-application:集群名称
@Bean
public TransportClient client(){
// 实例化es的客户端对象
TransportClient client = null;
try {
Settings settings = Settings.builder().put("cluster.name", "my-application").build();
client = new PreBuiltTransportClient(settings)
.addTransportAddress(new TransportAddress(InetAddress.getByName("127.0.0.1"), 9300));
} catch (Exception e) {
e.printStackTrace();
}
return client;
}
- 使用
@Autowired
private TransportClient client;
- 查询
SearchRequestBuilder requestBuilder = client.prepareSearch("popu_info");//索引
requestBuilder.setQuery(QueryBuilders.termQuery("pflag", "1"));//搜索条件
requestBuilder.addSort("pupdatetime", SortOrder.ASC);//排序
//requestBuilder.setFetchSource(new String[] { "pid", "xm", "jzdz" },null);//显示的字段
requestBuilder.setFrom(0);//分页,默认0
requestBuilder.setSize(20);//数量0-19
MultiSearchResponse multiResponse = client.prepareMultiSearch().add(requestBuilder)
.execute().actionGet();
for (MultiSearchResponse.Item item : multiResponse.getResponses()) {
SearchResponse response = item.getResponse();
System.out.println(response.getHits().getTotalHits());//总数
Map<String,Object> datas = null;
for (SearchHit h : response.getHits().getHits()) {
datas = h.getSourceAsMap();
System.out.println(datas.toString());//数据
}
}
- 总结
boost(5):查询结果权重,权重越高,结果越靠前
//多字段
QueryBuilders.multiMatchQuery("条件", "xm","jzdz","xbhz","lxdh","zjhm","hjdz")
//精确,值:数字类型
QueryBuilders.termQuery("pflag", "1")
//模糊查询,非中文
QueryBuilders.matchQuery( "xm","aaa")
//模糊查询,中文
QueryBuilders.matchPhraseQuery( "xm","中文").boost(5)
//精确,值:非数字,keyword:代表不分词
QueryBuilders.termQuery("is_drug.keyword","T");
//模糊查询,非中文
QueryBuilders.wildcardQuery("zjhm", "*31010*")
or查询
BoolQueryBuilder b = QueryBuilders.boolQuery();
BoolQueryBuilder bool = QueryBuilders.boolQuery();
bool.must(QueryBuilders.termQuery("pflag", "1"));
bool.must(QueryBuilders.termQuery("is_drug.keyword","T"));
b.should(bool);
bool = QueryBuilders.boolQuery();
bool.mustNot(QueryBuilders.termQuery("pflag", "0"));
bool.must(QueryBuilders.multiMatchQuery("id", "street_id","hjd_street_id"));
b.should(bool);
must:and &
mustNot:!=
should:or ||
and查询,filter:过滤
BoolQueryBuilder b = QueryBuilders.boolQuery();
b.filter(QueryBuilders.termQuery("pflag", "1"));
b.filter(QueryBuilders.termQuery("is_drug.keyword","T"));
BoolQueryBuilder bool = QueryBuilders.boolQuery();
bool.should(QueryBuilders.matchPhraseQuery( "jzdz",""));
bool.should(QueryBuilders.matchPhraseQuery( "hjdz",""));
b.filter(bool);
下篇讲解聚合查询和集群
推荐阅读
-
Windows下MySQL服务无法停止和删除的解决办法
-
Mac环境下php操作mysql数据库的方法分享
-
oracle 服务启动,关闭脚本(windows系统下)
-
windows10下安装TensorFlow Object Detection API的步骤
-
Windows10系统下统一文件夹显示视图改如何解决?
-
jar文件打不开怎么办(windows下运行jar程序)
-
node.js程序作为服务并在windows下开机自启动(用forever)
-
浅谈Windows下 PHP4.0与oracle 8的连接设置
-
Windows下使用puTTY 和WinSCP 远程控制和管理Linux系统
-
python在windows和linux下获得本机本地ip地址方法小结