1. 程式人生 > >[大數據]-Fscrawler導入文件(txt,html,pdf,worf...)到Elasticsearch5.3.1並配置同義詞過濾

[大數據]-Fscrawler導入文件(txt,html,pdf,worf...)到Elasticsearch5.3.1並配置同義詞過濾

app alt pil 所在 word jar包 raw 文件名 包含

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上連接失敗。

[大數據]-Fscrawler導入文件(txt,html,pdf,worf...)到Elasticsearch5.3.1並配置同義詞過濾