文件搜索引擎的搭建Elasticsearch+Fscrawler+SearchUI+Git+Nginx

news2024/11/13 15:17:55

文章目录

  • 前言
  • 如何搭建文档搜索引擎
    • 服务器架构
    • 环境准备
    • 一、搭建Elasticsearch
    • 二、搭建Fscrawler
    • 三、搭建SearchUI服务
    • 四、定时拉取Git文件
    • 五、搭建Nginx文件下载服务器

前言

搭建一套文档搜索引擎。有时候,我们有一批文档,需要在这批文档中查找想要的内容,此时想要找到文档里面的内容就变的很麻烦。本文将介绍如何搭建一套文档搜索引擎。

如何搭建文档搜索引擎

服务器架构

在这里插入图片描述

环境准备

一台Cenos 7.x 的服务器
支持Docker
NodeJs环境
支持nodejs和npm
安装命令

yum install -y nodejs
yum install -y npm

支持git命令

yum install -y git

如下服务均搭建在同一台服务器上

一、搭建Elasticsearch

  1. 下载IK分词器
    IK分词器 Elasticsearch默认是没有分词功能的,分词是以插件的形式安装。 默认情况下,Es没有分词器,分词器是以插件包的形式存在。 下载地址 :https://github.com/medcl/elasticsearch-analysis-ik/releases/
    注意: 下载的版本需要与ES版本一致(建议)

  2. 解压后,修改文件夹名称为IK,并上传到服务器/home/elasticsearch/plugins
    在这里插入图片描述

  3. 启动ES

docker run -d -v /home/elasticsearch/plugins:/usr/share/elasticsearch/plugins --name myelasticsearch -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" -e ES_JAVA_OPTS="-Xms64m -Xmx512m" elasticsearch:7.17.4

二、搭建Fscrawler

  1. 提前在/root/tmp目录准备两个文档用于测试
    在这里插入图片描述

2.启动Fscrawler,在启动时,系统会询问Do you want to create it(Y/N)?回答Y

docker run -it --rm -v ~/.fscrawler:/root/.fscrawler -v ~/tmp:/tmp/es:ro dadoonet/fscrawler fscrawler mydoc

在这里插入图片描述

3配置参数

vim /root/.fscrawler/mydoc/_settings.yaml

(分别设置更新频率,扫描文件类型,es的地址)

    update_rate: "60s"
  includes:
  - "*/*.pdf"
  - "*/*.doc"
  - "*/*.docx"
  - "*/*.xls"
  - "*/*.xlsx"
  - "*/*.txt"
  excludes:
  - "*/~*"

elasticsearch:
  nodes:
  - url: "http://myelasticsearch:9200"

在这里插入图片描述

4启动服务(后台运行)

docker run -d -it --rm -v ~/.fscrawler:/root/.fscrawler -v ~/tmp:/tmp/es:ro --link myelasticsearch dadoonet/fscrawler fscrawler mydoc

在这里插入图片描述

三、搭建SearchUI服务

下载 SearchUI ,地址:
https://github.com/elastic/search-ui
注意,本示例的版本是v1.8.0

  1. 修改源码内容search.js、buildRequest.js、buildState.js

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
2. 将searchui 代码复制到服务器/home目录下,且项目名称更改为了mysearchui
在这里插入图片描述
3. 进入该目录,执行启动命令
先设定该目录的执行权限

Chmod -R 777 mysearchui

在这里插入图片描述

进入到目录下面,启动命令

npm start > /dev/null 2>&1 &

在这里插入图片描述

4 访问,http://服务器ip:3000/,即可搜索

在这里插入图片描述

5 不要关闭服务器窗口,使用exit退出命令,这样可以保证服务继续运行,如果直接关闭服务器窗口,可能会导致搜索不可用。

四、定时拉取Git文件

前面的操作,已经可以进行搜索了,那么下面需要将git上面的文档定时拉去到上面约定的路径下,通过定时任务执行git pull命令,拉取文档,那么我们需要配置记住密码,既可以通过配置免密登录,也可以配置记住密码(这里为了简单,我们配置记住密码)。
1.配置记住密码的设置(后面我们只要输入一次账号密码,就不需要再次输入账号密码了),当然也可以配置ssh密钥免密的方式

git config --global credential.helper store   

2 进入到/root/tmp目录,克隆项目下来

git clone https://xxxxx/document.git

在这里插入图片描述

3.进入项目路径下
执行git pull命令(目的是确定git pull命令没问题)

git pull

在这里插入图片描述

4. 编写定时的pull命令脚本

vim documentcron.sh
cd /root/tmp/document
git pull
#设定可执行权限
chmod 777 documentcron.sh

在这里插入图片描述

  1. 配置定时任务,让拉取命令定期执行
#编辑定时任务
crontab -e  
#查看定时任务
crontabl -l
#添加定时任务(设定每3分钟执行一次git pull命令)
*/3 * * * * sh /home/documentcron.sh > /tmp/documentcron.log

在这里插入图片描述

6.检查定时任务是否将git的文件拉去到指定路径
直接在其他主机上向仓库push 了一个文档,稍等片刻,发现定时任务将文件拉取下来了。
在这里插入图片描述

五、搭建Nginx文件下载服务器

  1. 配置nginx.conf (不需要下载nginx,docker部署)
    在这里插入图片描述
vim nginx.conf
user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log;
pid /run/nginx.pid;
include /usr/share/nginx/modules/*.conf;
events {
    worker_connections 1024;
}
http {
    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';
    access_log  /var/log/nginx/access.log  main;
    sendfile            on;
    tcp_nopush          on;
    tcp_nodelay         on;
    keepalive_timeout   65;
    types_hash_max_size 2048;
    default_type        application/octet-stream;
    # Load modular configuration files from the /etc/nginx/conf.d directory.
    # See http://nginx.org/en/docs/ngx_core_module.html#include
    # for more information.
    include /etc/nginx/conf.d/*.conf;
    server {
        listen       80 default_server;
        listen       [::]:80 default_server;
        server_name  _;
        # Load configuration files for the default server block.
        include /etc/nginx/default.d/*.conf;
        location /view {
       # root    /usr/share/nginx/html/download;
	    alias    /usr/share/nginx/html/download;
        autoindex on;    #开启索引功能
        autoindex_exact_size off;  #关闭计算文件确切大小(单位bytes),只显示大概大小(单位kb、mb、gb)
        autoindex_localtime on;   #显示本机时间而非 GMT 时间
        }
        error_page 404 /404.html;
            location = /40x.html {
        }
        error_page 500 502 503 504 /50x.html;
            location = /50x.html {
        }
    }
}
  1. 启动nginx
docker run --name nginx -v /home/nginx/nginx.conf:/etc/nginx/nginx.conf -v /root/tmp/:/usr/share/nginx/html/download -p 3001:80 -d  nginx
  1. 搜索下载文件,复制下载链接打开即可

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/675505.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【从零开始学习JAVA | 第十篇】StringBuild介绍

前言: 本文会对StringBuild类进行详细的介绍,他相比较于String,在进行字符串拼接的时候大大提高了效率,是一个 很实用的工具。 StringBulider: StringBuilder是Java中的一个类,用于在一次创建和初始化后&a…

Java中反射机制,枚举,Lambda的使用

目录 一、反射机制 1、含义 2、作用 3、※反射相关的几个类 3.1、Class类(Class对象是反射的基石) 3.2、Class类中相关的方法 3.2.1 (※重要)常用获得类相关的方法 3.2.2 (※重要)常用获得类中属性、变量Field相关的方法 3.2.3 获得类中注解相…

详细设计报告

聊天系统设计与实现详细设计报告 1.编写目的 详细设计的主要任务是概要设计方案做完善和细化,本阶段主要对聊天应用系统进行过程化的描述,详细确定每一个功能模块的实现方式、执行流程,为程序员编码提供依据。设计用户界面。 2.总体方案确认 (1)系统总体结构确认 该项目管理…

Redis原理 - 通信协议RESP

原文首更地址,阅读效果更佳! Redis原理 - 通信协议RESP | CoderMast编程桅杆https://www.codermast.com/database/redis/redis-communication-protocol.html RESP协议 Redis 是一个 CS 架构的软件,通信一般分两步(不包括pipeli…

计算机组成与设计Patterson Hennessy 笔记_1 计算机概要与技术

Patterson & Hennessy 计算机概要与技术 计算机应用包括:个人计算机PC,服务器,嵌入式计算机。后PC时代出现了个人移动设备PMD(手机),云计算(在网络上提供服务的大服务器集群,供…

Unity Mac最新打苹果包流程

作者介绍:铸梦xy。IT公司技术合伙人,IT高级讲师,资深Unity架构师,铸梦之路系列课程创始人。 IOS详细打包流程1.申请APPID2.申请开发证书3.创建描述文件 IOS详细打包流程 1.申请AppID 2.创建证书 3.申请配置文件(又名描…

NodeJS KOA⑩②

文章目录 ✨文章有误请指正,如果觉得对你有用,请点三连一波,蟹蟹支持😘前言KOA Koa vs Express Koa更轻量 Koa~Context对象 Koa~异步流程控制 Koa~中间件模型Koa路由 1.1基本使用 2.2请求方式2.2.1规范写法2…

数据结构——带头节点的双向循环列表

带头节点的双向循环链表是一种特殊的双向链表,它与普通的双向链表相比,最大的区别是链表头结点的 next 指针不再指向第一个实际节点,而是指向链表中的第一个节点。同时,链表尾结点的 prev 指针也不再指向 NULL,而是指向…

轻松配置深度学习模型 ?

动动发财的小手,点个赞吧! 由于所有模块都需要大量参数和设置,因此管理深度学习模型可能很困难。训练模块可能需要诸如 batch_size 或 num_epochs 之类的参数或学习率调度程序的参数。同样,数据预处理模块可能需要 train_test_spl…

Java接口幂等性,如何重试?

Java接口幂等性,如何重试? 文章目录 Java接口幂等性,如何重试?前言一、幂等性是什么?二、为什么要幂等性?三、使用什么办法实现幂等性?1.insert前先select2.加悲观锁3.加乐观锁4.加唯一索引5.Re…

uniapp系列-uni.getAppBaseInfo() versionCode appVersion 值不对应该怎么解决?

今天看到一个BUG 问题描述 我们使用uniapp的官方文档中uni.getAppBaseInfo()后获取的 appVersionCode appVersion ,发现获得的结果和我们实际设置的不一致,不是manifest.json里面的值,如下图所示官方文档:https://uniapp.dcloud…

还原大师(MD5)

根据题目提示,都猜得到这应该跟MD5的加密形式有关系 我好像还没有具体了解过MD5编码的格式,或许本题可以通过MD5的编码格式推导出字符串 但是说实话,MD5的加密方式没有找到详细简介的文章 然后我就去网上百度了一下,经过大佬wp的洗…

java springboot整合MyBatis演示增删查改操作

前面我的文章 java springboot整合MyBatis做数据库查询操作讲述了整合springboot整合MyBatis 做了根据id查询的语句 那么 我们现在按它搭建的项目继续 我们在staffDao中添加一个insert函数 参考代码如下 Insert("insert into staff(name, age, status, departmentid) va…

chatgpt赋能python:Python编程实现1+22+333,解密方法

Python编程实现122333,解密方法 在Python编程开发中,我们经常需要求解不同类型的算数表达式,其中求解一系列类似122333的表达式是一个比较常见的需求。本文将会介绍如何使用Python语言方便地求解这类表达式,为大家提供一种针对此…

Redis中AOF和RDB

在Redis的持久化中,常使用的两个手段便是AOF和RDB进行持久化。 RDB(Redis DataBase)是Redis的持久化方式之一,在配置文件中,我们可以找到 对Redis进行持久化配置,而RDB在持久化时是怎么样进行工作的呢&…

ARM、ARM架构、ARM架构芯片

ARM是一种基于精简指令集(RISC)的处理器架构,它由英国的ARM公司设计和授权。 ARM芯片具有低功耗、高性能、高集成度等特点,广泛应用于嵌入式系统、移动设备、物联网、服务器等领域。本文将介绍ARM的各类芯片,包括其特…

Java-API简析_java.lang.ClassLoader类(基于 Latest JDK)(浅析源码)

【版权声明】未经博主同意,谢绝转载!(请尊重原创,博主保留追究权) https://blog.csdn.net/m0_69908381/article/details/131345825 出自【进步*于辰的博客】 其实我的【Java-API】专栏内的博文对大家来说意义是不大的。…

CentOS 7.9 安装 Jenkins

CentOS 7.9 安装 Jenkins 文章目录 CentOS 7.9 安装 Jenkins一、概述二、安装1、安装 OpenJDK2、安装 Jenkins3、启动 Jenkins4、给 Jenkins 放行端口 三、初始化 Jenkins 配置1、访问2、解锁 Jenkins3、配置清华大学的源地址4、安装插件5、创建管理员用户6、完成安装 四、功能…

TypeScript ~ TS 掌握自动编译命令 ③

作者 : SYFStrive 博客首页 : HomePage 📜: TypeScript ~ TS 📌:个人社区(欢迎大佬们加入) 👉:社区链接🔗 📌:觉得文章不错可以点点关注 &…

锐捷睿易:云端绑定别人账号,命令方式解绑

一、适用场景 云端绑定了别人的账号,但又不能让他解绑,只能自己解绑从新绑定自己MACC 前提:需要设备联网状态才可以解绑 二、配置步骤 1、登录macc,首页点击设备解绑 2、输入收集的设备序列号,点击获取专属URL&…