dock下使用Elasticsearch+ Elasticsearch-Head+Fscrawler构建文档搜索

1,298 阅读2分钟

需求:上百万的doc文档的搜索

使用软件:Elasticsearch 7.3.0/Elasticsearch-head 5/Fscrawler

Elasticsearch: ElasticSearch是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。Elasticsearch是用Java语言开发的,并作为Apache许可条款下的开放源码发布,是一种流行的企业级搜索引擎。ElasticSearch用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便。官方客户端在Java、.NET(C#)、PHP、Python、Apache Groovy、Ruby和许多其他语言中都是可用的。根据DB-Engines的排名显示,Elasticsearch是最受欢迎的企业搜索引擎,其次是Apache Solr,也是基于Lucene。

帮助文档:https://www.elastic.co/guide/en/elasticsearch/reference/7.3/index.html

Elasticsearch-head: elasticsearch-head是一个elasticsearch的集群管理、数据可视化、增删查改、查询语句可视化的工具,它是完全由html5编写的独立网页程序。

Fscrawler: Elasticsearch文件系统爬虫( FS爬虫),可读取doc,pdf等.

帮助文档:https://fscrawler.readthedocs.io/en/latest/

0x1

安装Elasticsearch

先安装Elasticsearch,其实官网也有介绍.再次稍微翻译一下.

修改内存权限(linux下)

sysctl -w vm.max_map_count=262144

下载镜像

docker pull docker.elastic.co/elasticsearch/elasticsearch:7.3.0

编辑docker-compose.yml文件

新建文件夹.内放入docker-compose.yml文件

version: '2.2'
services:
  es01:
    image: docker.elastic.co/elasticsearch/elasticsearch:7.3.0
    container_name: es01
    environment:
      - node.name=es01
      - discovery.seed_hosts=es02
      - cluster.initial_master_nodes=es01,es02
      - cluster.name=docker-cluster
      - bootstrap.memory_lock=true
      - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
    ulimits:
      memlock:
        soft: -1
        hard: -1
    volumes:
      - esdata01:/usr/share/elasticsearch/data
    ports:
      - 9200:9200
    networks:
      - esnet
  es02:
    image: docker.elastic.co/elasticsearch/elasticsearch:7.3.0
    container_name: es02
    environment:
      - node.name=es02
      - discovery.seed_hosts=es01
      - cluster.initial_master_nodes=es01,es02
      - cluster.name=docker-cluster
      - bootstrap.memory_lock=true
      - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
    ulimits:
      memlock:
        soft: -1
        hard: -1
    volumes:
      - esdata02:/usr/share/elasticsearch/data
    networks:
      - esnet

volumes:
  esdata01:
    driver: local
  esdata02:
    driver: local

networks:
  esnet:

终端下执行docker-compose up即可,在docker ps内可看到镜像运行

修改跨域访问

docker exec -it es01 bash
vim ./config/elasticsearch.yml

加入以下两段

http.cors.enabled: true
http.cors.allow-origin: "*"

退出,重启镜像

docker restart es01

0x2

运行Elasticsearch-Head

下载镜像

docker pull mobz/elasticsearch-head:5

创建

docker create --name elasticsearch-head -p 9100:9100 mobz/elasticsearch-head:5

开运行

docker start elasticsearch-head 然后在地址栏输入es地址链接就ok了

0x3

使用Fscrawler

下载

ESv7 对应的版本,找最新的.https://oss.sonatype.org/content/repositories/snapshots/fr/pilato/elasticsearch/crawler/fscrawler-es7/2.7-SNAPSHOT/

文章发布时使用的是fscrawler-es7-2.7-20190724.065618-41.zip

wget https://oss.sonatype.org/content/repositories/snapshots/fr/pilato/elasticsearch/crawler/fscrawler-es7/2.7-SNAPSHOT/fscrawler-es7-2.7-20190724.065618-41.zip

解压

unzip  fscrawler-es7-2.7-20190724.065618-41.zip

生成项目

项目名称暂以doc_data,可以根据自己需要修改为自己的项目名称

./bin/fscrawler doc_data

编辑项目文件

vim ~/.fscrawler/doc_data/_settings.yaml

修改如下几个地方

---
name: "doc_data"
fs:
  url: "/root/doc/" #文档的路径
  update_rate: "15m" #多长时间读取一次
  excludes:
  - "*/~*"
  json_support: false
  filename_as_id: false
  add_filesize: true
  remove_deleted: true
  add_as_inner_object: false
  store_source: false
  index_content: true
  attributes_support: false
  raw_metadata: false
  xml_support: false
  index_folders: true
  lang_detect: false
  continue_on_error: false
  ocr:
    language: "eng"
    enabled: true
    pdf_strategy: "ocr_and_text"
  follow_symlinks: false
elasticsearch:
  nodes:
  - url: "http://127.0.0.1:9200"  #es节点的地址
  bulk_size: 100
  flush_interval: "5s"
  byte_size: "10mb"

具体可参照Fs本地文件帮助

启动项目

./bin/fscrawler doc_data

0x4 小结

docker内最新版本号可上Docker hub查询.

如有什么错误,请留言指出.谢谢!