近期进行项目总结对项目过程资料进行分析,其中包括对多份会议纪要的内容进行分析,使用ELK并结合中文分词器IK进行关键字的提取和统计分析。
进入Elasticsearch目录输入命令行安装IK分词器
.\elasticsearch-plugin install https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v7.14.0/elasticsearch-analysis-ik-7.14.0.zip
安装完成后重启elasticsearch,并查看插件是否安装成功
.\elasticsearch-plugin list
analysis-ik即为安装成功的插件。
启动Kibana,打开开发工具界面,输入命令创建index,命名为meeting
PUT meeting
为字段content配置分词器,其中analyzer是导入数据时用的分词器,search_analyzer是查询时用的分词器,同时启用fielddata进行分词后的词频统计。
注意:fielddata启用会对堆内存占用较大,谨慎使用,推荐使用term_vector方式进行词频计算
PUT meeting/_mapping { "properties": { "content": { "type": "text", "analyzer": "ik_max_word", "search_analyzer": "ik_smart", "fielddata":"true", "fields" : { "keyword" : { "type" : "keyword", "ignore_above" : 256 } } } } }
仍然采用CSV格式文件导入会议纪要,由于原始会议纪要为word文档,所以花了一些时间将文档处理成CSV文件。
启动logstash导入数据,目标索引为meeting。
.\logstash.bat -f ..\config\hnrf-meeting.conf其中配置文件hnrf-meeting.conf为
input { stdin { } file{ path => "D:/Projects/2021-智慧人防/项目总结/会议纪要.csv" start_position => "beginning" sincedb_path => "D:/WebSites/ELK/History" } } filter { csv { separator => "," columns => ["recorddate","theme","person","tag","content"] } date { match => ["recorddate","yyyy-MM-dd"] } mutate { remove_field => ["message"] } } output { stdout { codec => json_lines } elasticsearch { hosts => "localhost:9200" index => "meeting" document_type => "_doc" } }
导入后端数据示例为:
查询命令为
GET meeting/_search { "size": 0, "aggs": { "messages": { "terms": { "field": "content", "size": 100 } } } }查询结构示例为
打开kibana,选择可视化库Visualize,点击按钮“创建可视化”,选择“基于聚合”
选择“标签云图”
选择索引meeting,添加存储桶,设置聚合类型为“词”,字段为“content”
刷新后可以看到生成的词云
ik_max_word: 会将文本做最细粒度的拆分,比如会将“中华人民共和国国歌”拆分为“中华人民共和国,中华人民,中华,华人,人民共和国,人民,人,民,共和国,共和,和,国国,国歌”,会穷尽各种可能的组合,适合 Term Query;
ik_smart: 会做最粗粒度的拆分,比如会将“中华人民共和国国歌”拆分为“中华人民共和国,国歌”,适合 Phrase 查询。
使用分词器进行词频统计时会发现有一些不必要的分词或者不满足要求的分词,比如一些语气词、介词等(与、和、的、从、而),以及一些专有名词(公众版APP、数据采集)。可以添加自定义词典定义专有名词并去除一些不必要的分词。
IK插件安装后会自动在elasticsearch的config目录下生成文件夹analysis-ik,包含了IK的字典模板和字典配置文件。
修改配置文件IKAnalyzer.cfg.xml
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd"> <properties> <comment>IK Analyzer 扩展配置</comment> <!--用户可以在这里配置自己的扩展字典 --> <entry key="ext_dict">my_main.dic</entry> <!--用户可以在这里配置自己的扩展停止词字典--> <entry key="ext_stopwords">my_stopword.dic</entry> <!--用户可以在这里配置远程扩展字典 --> <!-- <entry key="remote_ext_dict">words_location</entry> --> <!--用户可以在这里配置远程扩展停止词字典--> <!-- <entry key="remote_ext_stopwords">words_location</entry> --> </properties>
其中my_main.dic为自己的扩展字典
my_stopword.dic为自己的扩展停止字典
注意:IK分词器插件安装后或自定义词典修改后都需要重启ES使其生效