[大数据]-Fscrawler导入文件(txt,html,pdf,worf...)到Elasticsearch5.3.1并配置同义词过滤

fscrawler是ES的一个文件导入插件,只需要简单的配置就可以实现将本地文件系统的文件导入到ES中进行检索,同时支持丰富的文件格式(txt.pdf,html,word...)等等。下面详细介绍下fscrawler是如何工作和配置的。

一、fscrawler的简单使用:

1、下载: wget https://repo1.maven.org/maven2/fr/pilato/elasticsearch/crawler/fscrawler/2.2/fscrawler-2.2.zip

2、解压:  unzip fscrawler-2.2.zip  目录如下:bin下两个脚本,lib下全部是jar包。

3、启动: bin/fscrawler job_name job_name需要自己设定,第一次启动这个job会创建一个相关的_setting.json用来配置文件和es相关的信息。如下:

  • 编辑这个文件: vim ~/.fscrawler/job_1/_settting.json 修改如下:


  • name表示的是一个job的name同时也是ES数据的的index,URL:代表需要导入的文件所在的文件夹。update_rate:表示多久刷新一次,host:连接es的IP地址和端口号。type:代表的就是ES的type。改完之后保存就可以运行,fs就会将数据导入了。
  • 导入数据(会开启一个线程,根据设定的时间进行数据刷新,我们修改文件ES也能得到新的数据):bin/fscrawler job_name

二、fscrawler配置IK分词器和同义词过滤:

  • 初始化一个job后系统会生成三个配置文件:doc.json,folder.json,_setting.json(1,2,5代表ES的版本号,我们是5.x版本就修改5文件夹下的配置文件。)这三个文件用来创建index,mapping。
  • 配置IK分词首先在_default/5/_setting.json中配置analysis:删掉原有的配置文件,添加如下内容:
  • {
        "settings": {
            "analysis": {
                "analyzer": {
                    "by_smart": {
                        "type": "custom",
                        "tokenizer": "ik_smart",
                        "filter": [
                            "by_tfr",
                            "by_sfr"
                        ],
                        "char_filter": [
                            "by_cfr"
                        ]
                    },
                    "by_max_word": {
                        "type": "custom",
                        "tokenizer": "ik_max_word",
                        "filter": [
                            "by_tfr",
                            "by_sfr"
                        ],
                        "char_filter": [
                            "by_cfr"
                        ]
                    }
                },
                "filter": {
                    "by_tfr": {
                        "type": "stop",
                        "stopwords": [
                            " "
                        ]
                    },
                    "by_sfr": {
                        "type": "synonym",
                        "synonyms_path": "analysis/synonyms.txt"
                    }
                },
                "char_filter": {
                    "by_cfr": {
                        "type": "mapping",
                        "mappings": [
                            "| => |"
                        ]
                    }
                }
            }
        }
    }

    跟前面几篇博客中提到的自定义分词器创建同义词过滤一模一样,里面的filter可以选择删除,保留必要的部分,这样我们自定义了两种分词器:by_smart,by_max_word.

  • 修改_default/5/doc.json:删除掉所有字段的分词器;analyzer:"xxx",因为在这里只有一个字段需要分词那就是content(文件的内容),给content节点添加加分词器。如下:
  • "content" : {
          "type" : "text",
          "analyzer":"by_max_word" #添加此行。。。
        },
  • 配置就完成了,同样的再次启动job: bin/fscrawler job_name
  • 访问9100:可以看到index已经创建好,如下图:
  • 同义词查询:我在同义词中配置了西红柿和番茄,在/tmp/es文件夹下中添加了一个包含西红柿和番茄的文件,9100端口用以下语句查询:
  • {
        "query": {
            "match": {
                "content": "番茄"
            }
        },
        "highlight": {
            "pre_tags": [
                "<tag1>",
                "<tag2>"
            ],
            "post_tags": [
                "</tag1>",
                "</tag2>"
            ],
            "fields": {
                "content": {}
            }
        }
    }

    结果如下:

  • {
        "hits": [
            {
                "_index": "jb_8",
                "_type": "doc",
                "_id": "3a15a979b4684d8a5d86136257888d73",
                "_score": 0.49273878,
                "_source": {
                    "content": "我爱吃西红柿鸡蛋面。还喜欢番茄炒蛋饭",
                    "meta": {
                        "raw": {
                            "X-Parsed-By": "org.apache.tika.parser.DefaultParser",
                            "Content-Encoding": "UTF-8",
                            "Content-Type": "text/plain;charset=UTF-8"
                        }
                    },
                    "file": {
                        "extension": "txt",
                        "content_type": "text/plain;charset=UTF-8",
                        "last_modified": "2017-05-24T10: 22: 31",
                        "indexing_date": "2017-05-25T14: 08: 10.881",
                        "filesize": 55,
                        "filename": "sy.txt",
                        "url": "file: ///tmp/es/sy.txt"
                    },
                    "path": {
                        "encoded": "824b64ab42d4b63cda6e747e2b80e5",
                        "root": "824b64ab42d4b63cda6e747e2b80e5",
                        "virtual": "/",
                        "real": "/tmp/es/sy.txt"
                    }
                },
                "highlight": {
                    "content": [
                        "我爱吃<tag1>西红柿</tag1>鸡蛋面。还喜欢<tag1>番茄</tag1>炒蛋饭"
                    ]
                }
            }
        ]
    }
  • 完整的IK分词同义词过滤就配置完成了。
  • 如下图是txt,html格式,其他格式亲测可用,但是文件名中文会乱码。

注意:

  要选择fs2.2的版本,2.1的版本在5.3.1的ES上连接失败。

时间: 2024-11-03 23:36:15

[大数据]-Fscrawler导入文件(txt,html,pdf,worf...)到Elasticsearch5.3.1并配置同义词过滤的相关文章

[大数据]-Logstash-5.3.1的安装导入数据到Elasticsearch5.3.1并配置同义词过滤

阅读此文请先阅读上文:[大数据]-Elasticsearch5.3.1 IK分词,同义词/联想搜索设置,前面介绍了ES,Kibana5.3.1的安装配置,以及IK分词的安装和同义词设置,这里主要记录Logstash导入mysql数据到Elasticsearch5.3.1并设置IK分词和同义词.由于logstash配置好JDBC,ES连接之后运行脚本一站式创建index,mapping,导入数据.但是如果我们要配置IK分词器就需要修改创建index,mapping的配置,下面详细介绍. 一.Log

MYSQL数据库导入大数据量sql文件失败的解决方案

1.在讨论这个问题之前首先介绍一下什么是"大数据量sql文件". 导出sql文件.选择数据库-----右击选择"转储SQL文件"-----选择"结构和数据"  .保存文件db_mras.sql文件. 2.导入sql文件.在MYSQL中新建数据库db_mras.选择数据库-----右击选择"运行SQL文件"-----选择文件db_mras.sql,运行. 现在发现运行失败,提示错误"MySQL server has g

POI实现大数据EXCLE导入导出,解决内存溢出问题

使用POI能够导出大数据保证内存不溢出的一个重要原因是SXSSFWorkbook生成的EXCEL为2007版本,修改EXCEL2007文件后缀为ZIP打开可以看到,每一个Sheet都是一个xml文件,单元格格式和单元格坐标均用标签表示.直接使用SXSSFWorkbook来到导出EXCEL本身就是POI为了大数据量导出而量身定制的,所以导出可以直接使用SXSSFWorkbook方式. 为了保险起见可以采用多Sheet的方式保证内存不溢出.需要注意的是Sheet名称不能重复:下载的时候需要定义好返回

SQL Server 大数据搬迁之文件组备份还原实战

原文:SQL Server 大数据搬迁之文件组备份还原实战 一.本文所涉及的内容(Contents) 本文所涉及的内容(Contents) 背景(Contexts) 解决方案(Solution) 搬迁步骤(Procedure) 搬迁脚本(SQL Codes) 注意事项(Attention) 疑问(Questions) 参考文献(References) 二.背景(Contexts) 有一个数据库大概在700G左右,需要从服务器A搬迁到服务器B,两台服务器网络传输速度可以达到8MB/s,怎么做才能更

《决战大数据大数据的关键思考 升级版》PDF电子书分享

链接:https://pan.baidu.com/s/1RlGdyXSh8qpL4doE6UPczA 密码:gc7j 分享<决战大数据大数据的关键思考 升级版>PDF电子书,本书为高清PDF电子书,内容截图如下 原文地址:https://www.cnblogs.com/meidongdiluo/p/9625576.html

《零起点Python大数据与量化交易》中文PDF+源代码

下载:https://pan.baidu.com/s/1JWmwMFHZV0mYAyAl-HkPyw 更多资料:http://blog.51cto.com/3215120 <零起点Python大数据与量化交易>中文PDF+源代码中文PDF,带目录和书签,655页,文字可以复制粘贴.配套源代码. 本书是国内关于Python大数据与量化交易的原创图书. 如图: 原文地址:http://blog.51cto.com/4820691/2311108

分享MSSQL、MySql、Oracle的大数据批量导入方法及编程手法细节

1:MSSQL SQL语法篇: BULK INSERT [ database_name . [ schema_name ] . | schema_name . ] [ table_name | view_name ] FROM 'data_file' [ WITH ( [ [ , ] BATCHSIZE = batch_size ] [ [ , ] CHECK_CONSTRAINTS ] [ [ , ] CODEPAGE = { 'ACP' | 'OEM' | 'RAW' | 'code_pag

大数据开发之文件归档和解归档

一,归档 在大数据开发中往往要运算海量数据,可是这些数据分布在许多小文件中,传输和运算十分不方便,为此我们得进行文件归档 即把几个小文件写到一个文件中形成大文件,可是我们要怎么写呢?每个团队有每个团队的方法,下面介绍我自己的方法. 格式:        4个字节        文件名称的数据存储大小(n,表示存储的文件有几个字节) n个字节        文件名称 4个字节        文件内容的数据存储大小(m,表示存储的文件有几个字节) m个字节        文件内容 有几个小文件,那么

大数据-Hadoop小文件问题解决方案

HDFS中小文件是指文件size小于HDFS上block(dfs block size)大小的文件.大量的小文件会给Hadoop的扩展性和性能带来严重的影响.HDFS中小文件是指文件size小于HDFS上block大小的文件.大量的小文件会给Hadoop的扩展性和性能带来严重的影响. 大数据学习群:716581014 小文件是如何产生的? 动态分区插入数据,产生大量的小文件,从而导致map数量剧增 reduce数量越多,小文件也越多,reduce的个数和输出文件个数一致 数据源本身就是大量的小文