ElasticSearch搜索引擎在web页面的应用实例
简介
在我的上一篇博文中,详细写到了ElasticSearch的日志服务的应用场景,本文讨论的是另一个场景:ElasticSearch作为搜索引擎在web项目中的使用。ElasticSearch作为搜索引擎最主要的作用是分词,即将一个段文字或一个词组分割成小粒度,并将这些经过分割再组合的小粒度的文字来匹配搜索结果,如有需要,还可以高亮显示。
效果如下:
我这里是用ElasticSearch做了一个input的输入自动填充,自动匹配出来的下拉框就是ElasticSearch将我输入的词汇经过分割后在索引中匹配出来的结果。
使用
上面的demo基于以下环境开发:
后端:springboot:2.0.1.RELEASE
前端:layui
elasticsearch:6.8.1
demo中的红色高亮显示是在后端elasticsearch的代码中配置的。
demo中的input自动填充框组件为 autocomplete,可在layui 第三方组件平台自行下载。如果前端不是用的layui,比如vue的elementUI等,也都有各自适配的input自动填充组件。自动填充组件的匹配条目的数据源是后端elasticsearch的搜索结果。
elasticsearch的匹配到的数据最初是存在mysql数据库中,通过logstash将mysql的数据同步给elasticsearch,并以索引的形式存在。
1,修改logstash的配置
修改 …\logstash-6.3.0\bin目录下的logstash.conf文件。可以通过logstash同步mysql的数据给elasticsearch。如下
input {
stdin {
} }
input {
tcp {
type => "deliver_log"
host => "127.0.0.1"
port => 9250
mode => "server"
codec => json_lines
}
jdbc {
type => "baoji_company_requirements"
jdbc_connection_string => "jdbc:mysql://localhost:3306/baoji-staging?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&&useSSL=false"
jdbc_user => "root"
jdbc_password => "123456789"
jdbc_driver_library => "D:\Work\Project\elk\logstash-6.3.0\bin\mysql-connector-java-5.1.46.jar"
jdbc_driver_class => "com.mysql.jdbc.Driver"
#取消小写
lowercase_column_names => false
#要执行的sql语句
statement => "select * from baoji_company_requirements"
#这里可以定制定时操作,比如每10分钟执行一次同步(分 时 天 月 年)
schedule => "*/10 * * * *"
}
}
# output {
stdout {
codec => rubydebug } }
output {
stdout{
codec =>rubydebug}
# 这个if判断容易写成if[type=="deliver_log"],注意中括号内只有type这个属性名,不包含条件。
# deliver_log是将收集到的日志输出到日志对应的索引中
if[type]=="deliver_log"{
elasticsearch {
hosts => ["localhost:9200"]
index => "logback-%{+YYYY.MM.dd}"
user => "elastic"
password => "gJRr45HLoRVzoqyRaWxO"
}
}
# baoji_company_requirements是将收集到的表数据输出到表名对应的索引中
# 我们此处直接将要创建的索引名index写成表名,方便记忆与理解
if[type]=="baoji_company_requirements"{
elasticsearch {
hosts => ["localhost:9200"]
index => "baoji_company_requirements"
user => "elastic"
password => "gJRr45HLoRVzoqyRaWxO"
}
}
}
以上配置完成后,记得启动ElasticSearch服务和Logstash服务。启动logstash服务成功后会立即自动扫描数据库中的数据;在kibana配置索引模式后也可以看到扫描到的同步后的mysql数据。
2,修改springboot的配置文件
先看项目结构:
我的项目是多模块项目,本文的demo在图上的manage-system模块。除了图上的三个文件,还有该模块下的pom文件以及application.properties配置文件需要改动
1,修改pom文件,添加依赖(如果项目有多个模块,修改需求所在的当前子模块)
<!--elasticsearch-->
<dependencies>
<!-- 其他不相关的依赖省略... -->
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-elasticsearch</artifactId>
<version>3.2.1.RELEASE</version>
</dependency>
<dependency>
<groupId>org.elasticsearch.client</groupId>
<artifactId>elasticsearch-rest-high-level-client</artifactId>
</dependency>
</dependencies>
<!--版本控制-->
<dependencyManagement