標籤:url txt 解壓 parse update field 等等 _id path
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相關的資訊。如下:
二、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並配置同義字過濾