Windows下安装Elasticsearch
前言
之前整理了一份安装的步骤,一直没时间写博客,拖了很久...今天抽时间发出来,记录一下,还没弄完,后续会补全
步骤:
一、安装Elasticsearch
1.下载ES https://www.elastic.co/cn/downloads/elasticsearch
2.安装ES:路径可以自己定义,其他的一路默认
安装完成后,查看服务,已经启动了,下面验证下安装成功了没
访问 http://localhost:9200 如果是下边的提示就是成功了
二、安装head插件
1.先安装nodejs
32位安装包下载地址: https://nodejs.org/dist/v4.4.3/node-v4.4.3-x86.msi
64位安装包下载地址: https://nodejs.org/dist/v4.4.3/node-v4.4.3-x64.msi
2.安装
安装grunt
因为运行head需要借助grunt命令,所以需要安装grunt。进入Node.js目录下,执行命令npm install -g grunt-cli,将grunt安装位全局命令。
进入head主目录执行npm install安装grunt,安装完成后执行grunt -version查看是否安装成功,会显示安装的版本号。
3.配置head
elasticsearch.yml配置:
bootstrap.memory_lock: false
cluster.name: elasticsearch
http.port: 9200
node.data: true
node.ingest: true
node.master: true
node.max_local_storage_nodes: 1
node.name: DESKTOP-KUCB0MD
path.data: D:\elasticsearch\data
path.logs: D:\elasticsearch\logs
transport.tcp.port: 9300
xpack.license.self_generated.type: basic
xpack.security.enabled: false
http.cors.enabled: true
http.cors.allow-origin: "*"
默认head放到根目录下
三、数据同步
1.下载logstash https://www.elastic.co/cn/downloads/logstash
解压后放置根目录下
2.安装ruby
3.下载kibana https://www.elastic.co/cn/downloads/kibana
连接多个表logstash https://stackoverflow.com/questions/37613611/multiple-inputs-on-logstash-jdbc/37613839#37613839
要配置好jdbc.conf
sql语句写到myes.sql里就行
要有jdbc的插件
logstash -f jdbcconfig/jdbc.conf
注意 用的java版本11没成功 太高了 降低到1.8就能同步数据了
同步的时候 只同步一条数据 一直再替换 导致最后es里只有一条
解决方案如下:
这个一定要前后小写(黄色位置):
input {
stdin {
}
jdbc {
jdbc_driver_library => "D:\elasticsearch\Microsoft JDBC Driver 6.0 for SQL Server\sqljdbc_6.0\chs\jre8\sqljdbc42.jar"
jdbc_driver_class => "com.microsoft.sqlserver.jdbc.SQLServerDriver"
jdbc_connection_string => "jdbc:sqlserver://127.0.0.1:1433;DatabaseName=hdz"
jdbc_user => "sa"
jdbc_password => "1"
# schedule => 分 时 天 月 年
# schedule => * 22 * * * //will execute at 22:00 every day
schedule => "* * * * *"
jdbc_paging_enabled => true
jdbc_page_size => 1000
clean_run => false
use_column_value => true
#设置查询条件的字段
tracking_column => lastedittime
record_last_run => true
last_run_metadata_path => "D:\elasticsearch\logstash-7.3.0\bin\jdbcconfig\data\station_parameter.txt"
#设置列名小写
lowercase_column_names => true
statement_filepath => "D:\elasticsearch\logstash-7.3.0\bin\jdbcconfig\myes.sql"
#索引的类型
type => "goods"
}
}
filter {
json {
source => "message"
remove_field => ["message"]
}
}
output {
elasticsearch {
hosts => ["127.0.0.1:9200"]
action => "index"
#索引
index => "goods"
document_id => "%{[id]}"
}
stdout {
#codec => json_lines
#设置输出的格式
codec => line {
format => "id: %{[id]} name: %{[name]} shortname: %{[shortname]} make: %{[make]} series: %{[series]} "
}
}
}
不知道为什么他一直在做查询 数据已经同步好了
tracking_column => lastedittime 配置中 这个字段 我改为了id就是导入数据完成之后
他会在station_parameter.txt记录一下 我这里改为记录id 然后sql语句之后加上
select g.*,c0.Name as c0Name,c1.Name as c1Name,c2.Name as c2Name from MallGoods g join [dbo].[MallCategory] c0 on g.Cat0=c0.Id join [dbo].[MallCategory] c1 on g.Cat1=c1.Id join [dbo].[MallCategory] c2 on g.Cat2=c2.Id where g.id > :sql_last_value
他会验证id是否大于上次保存的最后一个id 大于则是新增的 会添加数据
安装ik分词
https://github.com/medcl/elasticsearch-analysis-ik/releases
重启elasticsearch服务
.net
安装nuget Nest
他会自动引用这三个库
发现问题:
1.搜索条件只能是配置好的
format => "id: %{[id]} name: %{[name]} shortname: %{[shortname]} make: %{[make]} series: %{[series]} "
2.PlainElastic.Net 这个库
PlainElastic.Net.Serialization.SearchResult
这个返回结果 之前elasticsearch6.4的时候是正确的
现在是7.3.0版本 返回的total由之前的int 变为了
"total": {
• "value": 10000,
• "relation": "gte"
},