Elk搭建古诗搜索实战

    技术2026-06-12  8

    本文安装环境是macos,基于 elk 7.6.2搭建,不同版本之间略有差异,可以选择官网下载,也可以点击这里的的链接下载。

    软件下载地址提取码elasticsearchhttps://pan.baidu.com/s/1835hI05ZqT1LSCxGtDCBxQokyvkibanahttps://pan.baidu.com/s/1m6NzW4FbzHWpwsWz3AtmHgb6bvlogstashhttps://pan.baidu.com/s/1F8eANfMFPXyIqdnFDH7RIA18hi

    准备工作

    准备古诗数据

    github 上有个中国古诗词数据仓库,地址古诗词。可以自行从里面的数据中提取数据放到 mysql 中。这里准备好了 sql 数据,可以下载导入到自己的数据库中,文件大小 111.2M,共30多万首古诗。 链接:https://pan.baidu.com/s/1yNbaLa0iPCNqFckjYrSjuA 提取码:uy8h

    安装 jdk

    自行百度。

    修改 hosts

    查看服务器内网ip地址,然后给它取个域名,修改 hosts 文件,后续的配置都使用该域名。我的 hosts 文件如下:

    192.168.31.17 applebook

    搭建elasticsearch

    修改配置文件 elasticsearch/config/elasticsearch.yml。

    # 集群名称 cluster.name: elk77 # 节点名称 node.name: node-applebook # 绑定的ip network.host: applebook # 绑定端口 http.port: 9200 # 初始化主节点 cluster.initial_master_nodes: ["node-applebook"]

    下载 ik分词器。链接: https://pan.baidu.com/s/1wMZTMkjBvKX4wO0uVlvWzA 提取码: vhk5。将插件解压到elasticsearch/plugins目录下。启动 elasticsearch

    ./bin/elasticsearch

    启动完成之后访问 http://applebook:9200 ,可以看到节点信息

    { "name" : "node-applebook", "cluster_name" : "elk77", "cluster_uuid" : "Uzqg-RtZR2-RX44qKJdg7w", "version" : { "number" : "7.6.2", "build_flavor" : "default", "build_type" : "tar", "build_hash" : "ef48eb35cf30adf4db14086e8aabd07ef6fb113f", "build_date" : "2020-03-26T06:34:37.794943Z", "build_snapshot" : false, "lucene_version" : "8.4.0", "minimum_wire_compatibility_version" : "6.8.0", "minimum_index_compatibility_version" : "6.0.0-beta1" }, "tagline" : "You Know, for Search" }

    搭建kibana

    修改配置文件 kibana/config/kibana.yml

    # kibana 端口和ip server.port: 5601 server.host: "applebook" # elasticsearch 地址 elasticsearch.hosts: ["http://applebook:9200"] # 中文界面 i18n.locale: "zh-CN"

    启动 kibana。

    ./bin/kibana

    访问http://applebook:5601,可以看到 kibana 界面。 在 kibana 左侧栏选择 Dev Tools,然后运行如下命令:

    PUT chinese_poetry_shi { "settings": { "index": { "number_of_shards": "1", "number_of_replicas": "0" } }, "mappings": { "properties": { "id": { "type": "keyword" }, "author": { "type": "keyword" }, "dynasty": { "type": "keyword" }, "title": { "type": "keyword" }, "paragraphs": { "type": "text", "analyzer": "ik_max_word" }, "createTime": { "type":"date" } } } }

    搭建logstash

    在logstash/conf下新建配置文件chinese-poetry.conf

    input { jdbc { jdbc_driver_library => "/绝对路径/lib/mysql-connector-java-8.0.19.jar" jdbc_driver_class => "com.mysql.cj.jdbc.Driver" jdbc_connection_string => "jdbc:mysql://applebook:3306/chinese-poetry?serverTimezone=UCT" jdbc_user => "root" jdbc_password => "root" schedule => "* * * * *" statement => "SELECT id,author,dynasty,paragraphs,title,createTime FROM chinese_poetry_shi where createTime > :sql_last_value" use_column_value => true tracking_column_type => "timestamp" lowercase_column_names => "false" tracking_column => "createTime" jdbc_default_timezone => "Asia/Shanghai" } } filter { ruby { code => "event.set('timestamp', event.get('@timestamp').time.localtime + 8*60*60)" } ruby { code => "event.set('@timestamp',event.get('timestamp'))" } mutate { remove_field => ["timestamp"] } } output { elasticsearch{ hosts => ["applebook:9200"] index => "chinese_poetry_shi" document_id => "%{id}" } }

    启动 logstash

    ./bin/logstash -f ./conf/chinese-poetry.conf

    启动之后需要等一段时间,看机器性能。之后logstash会从mysql中查询出数据,然后同步到 elasticsearch 中。

    查看数据

    在 kibana 中选择 Management,然后选择索引模式,创建索引模式,输入chinese_poetry_shi,完成之后到 Discover 界面可以查询数据了。搜索 李白 会出先所有字段存在李白的数据。

    Processed: 0.013, SQL: 9