搭建自己的搜索引擎——oh-my-search使用

这篇具有很好参考价值的文章主要介绍了搭建自己的搜索引擎——oh-my-search使用。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

搭建自己的搜索引擎——oh-my-search使用

使用elasticsearch和search-ui搭建自己的搜索引擎,快速查找资源和文件。如果对代码感兴趣,相关代码已在github上开源,欢迎fork代码。

搭建elasticsearch

先搭建eleasticsearch再搭建kibana

搭建elasticsearch
mkdir elasticsarch
cd elasticsarch
mkdir -p /es/plugins
mkdir -p /es/data
mkdir -p /es/logs
mkdir -p /es/config
vim docker-compose.yml

编辑docker-compose.yml文件,内容如下:

version: '3'
services:
  elasticsearch:
    image: elasticsearch:8.9.0
    container_name: elasticsearch
    privileged: true
    environment:
      - "cluster.name=elasticsearch" #设置集群名称为elasticsearch
      - "discovery.type=single-node" #以单一节点模式启动
      - "ES_JAVA_OPTS=-Xms512m -Xmx1096m" #设置使用jvm内存大小
      - bootstrap.memory_lock=true
    volumes:
      - ./es/plugins:/usr/share/elasticsearch/plugins #插件文件挂载
      - ./es/data:/usr/share/elasticsearch/data:rw #数据文件挂载
      - ./es/logs:/usr/share/elasticsearch/logs:rw
      - ./es/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml
    ports:
      - 9200:9200
      - 9300:9300
    deploy:
     resources:
        limits:
           cpus: "2"
           memory: 1000M
        reservations:
           memory: 200M

其中./es/config/elasticsearch.yml的内容如下,可按需修改:

cluster.name: "elasticsearch"
network.host: 0.0.0.0
  • 启动elasticsearch

配置完成后,启动elasticsearch。

docker-compose --compatibility up -d

同时进入elasticsearch容器内部,修改密码。

# 进入容器内部
docker exec -it elasticsearch bash
# 修改密码
elasticsearch@4c37fcfb6f13:~$ ls
LICENSE.txt  NOTICE.txt  README.asciidoc  bin  config  data  jdk  lib  logs  modules  plugins
elasticsearch@4c37fcfb6f13:~$ bin/elasticsearch-reset-password --username elastic -i
bin/elasticsearch-reset-password --username kibana -i
搭建kibana
mkdir kibana
cd kibana
vim docker-compose.yml

docker-compose.yml的内容如下:

version: '3'
services:
  kibana:
    image: kibana:8.9.0
    container_name: kibana
    volumes:
      - ./kibana.yml:/usr/share/kibana/config/kibana.yml
    ports:
      - 5601:5601
    deploy:
     resources:
        limits:
           cpus: "1"
           memory: 1000M
        reservations:
           memory: 200M

kibana.yml的文件内容如下,可按需修改:

elasticsearch.hosts: http://elasticsearch:9200
elasticsearch.username: kibana
elasticsearch.password: kibana
server.host: "0.0.0.0"
server.name: kibana
xpack.monitoring.ui.container.elasticsearch.enabled: true
i18n.locale: zh-CN

启动kibana,

docker-compose --compatibility up -d

同时搭建eleasticsearch和kibana

  • 使用docker-compose启动elasticsearch

编辑docker-compose.yml文件,内容如下:

version: '3'
services:
  elasticsearch:
    image: elasticsearch:8.9.0
    container_name: elasticsearch
    privileged: true
    environment:
      - "cluster.name=elasticsearch" #设置集群名称为elasticsearch
      - "discovery.type=single-node" #以单一节点模式启动
      - "ES_JAVA_OPTS=-Xms512m -Xmx1096m" #设置使用jvm内存大小
      - bootstrap.memory_lock=true
    volumes:
      - ./es/plugins:/usr/local/dockercompose/elasticsearch/plugins #插件文件挂载
      - ./es/data:/usr/local/dockercompose/elasticsearch/data:rw #数据文件挂载
      - ./es/logs:/usr/local/dockercompose/elasticsearch/logs:rw
    ports:
      - 9200:9200
      - 9300:9300
    deploy:
     resources:
        limits:
           cpus: "2"
           memory: 1000M
        reservations:
           memory: 200M
  kibana:
    image: kibana:8.9.0
    container_name: kibana
    depends_on:
      - elasticsearch #kibana在elasticsearch启动之后再启动
    volumes:
      - ./es/config/kibana:/usr/share/kibana/config/kibana.yaml
    ports:
      - 5601:5601

其中kibana.yaml的内容如下:

elasticsearch.hosts: http://elasticsearch:9200
server.host: "0.0.0.0"
server.name: kibana
xpack.monitoring.ui.container.elasticsearch.enabled: true
i18n.locale: zh-CN
  • 进入elasticsearch终端,修改elasticsearch密码
# 进入容器内部
docker exec -it elasticsearch bash
# 修改密码
elasticsearch@4c37fcfb6f13:~$ ls
LICENSE.txt  NOTICE.txt  README.asciidoc  bin  config  data  jdk  lib  logs  modules  plugins
elasticsearch@4c37fcfb6f13:~$ bin/elasticsearch-reset-password --username elastic -i
WARNING: Owner of file [/usr/share/elasticsearch/config/users] used to be [root], but now is [elasticsearch]
WARNING: Owner of file [/usr/share/elasticsearch/config/users_roles] used to be [root], but now is [elasticsearch]
This tool will reset the password of the [elastic] user.
You will be prompted to enter the password.
Please confirm that you would like to continue [y/N]y


Enter password for [elastic]: 
Re-enter password for [elastic]: 
Password for the [elastic] user successfully reset.
elasticsearch@4c37fcfb6f13:~$
  • 生成kibana的token
# 重启容器然后进入容器内部生成kibana的token
docker exec -it elasticsearch bash
elasticsearch@4c37fcfb6f13:~$ bin/elasticsearch-create-enrollment-token -s kibana
  • 获取kibana验证码
# 在浏览器打开http://ip:5601,粘贴kibana的token,然后进入kibana容器内部获取验证码
sudo docker exec -it kibana bash       
kibana@fce2ab8aec1e:~$ ls
LICENSE.txt  NOTICE.txt  README.txt  bin  config  data  logs  node  node_modules  package.json  packages  plugins  src  x-pack
kibana@fce2ab8aec1e:~$ bin/kibana-verification-code 
Your verification code is:  042 943 

搭建search-ui

  • 创建search-ui项目
npm install -g  create-react-app
# 创建名为doc_index的项目
create-react-app doc_index --use-npm
cd doc_index
npm install --save @elastic/react-search-ui @elastic/search-ui-app-search-connector @elastic/search-ui-elasticsearch-connector
  • 启动search-ui项目
npm start
  • 创建api_key

登录kibana,进入到/app/management/security/api_keys/,创建一个api_key并记录api_key.

  • 创建索引

登录kibana的dev_tools创建和设置索引:

# 创建索引
PUT /doc_index

# 设置索引属性
PUT /doc_index/_mapping
{
  "properties":{
    "title":{
      "type":"text",
      "fields":{
        "suggest": {
          "type": "search_as_you_type"
        }
      }
    },
    "category":{
      "type":"text"
    },
    "url":{
      "type":"text"
    }
  }
}

# 设置查询返回的最大条数
PUT /doc_index/_settings
{
  "index" : {
    "max_result_window": 500000
  }
}
  • 导入数据
# 插入单条数据
POST /doc_index/_bulk
{"index":{}}
{"title":"test","category":"test","url":"http://localhost:3000"}

## 批量插入
POST /doc_index/_bulk
{"index":{}}
{"title":"test2","category":"test","url":"http://localhost:3001"}
{"index":{}}
{"title":"dir","category":"test","url":"http://localhost:3002"}
{"index":{}}
{"title":"ddssd","category":"test","url":"http://localhost:3003"}
{"index":{}}
{"title":"测试","category":"test","url":"http://localhost:3004"}

当然也可以用命令行插入,如使用curl命令:

curl --username username:password -H "Content-Type: application/json" -XPOST  192.168.56.130:9200/bank/account/_bulk?pretty --data-binary "@test.json"

其中–username指定elasticsearch的用户名和密码,test.json的内容如下:

{"index":{}}
{"title":"test2","category":"test","url":"http://localhost:3001"}
{"index":{}}
{"title":"dir","category":"test","url":"http://localhost:3002"}
{"index":{}}
{"title":"ddssd","category":"test","url":"http://localhost:3003"}
{"index":{}}
{"title":"测试","category":"test","url":"http://localhost:3004"}

完整数据插入命令如下:


PUT /doc_index/_mapping
{
  "properties":{
    "title":{
      "type":"text",
      "fields":{
        "suggest": {
          "type": "search_as_you_type"
        }
      }
    },
    "category":{
      "type":"text"
    },
    "url":{
      "type":"text"
    }
  }
}

PUT /doc_index/_settings
{
  "index" : {
    "max_result_window": 500000
  }
}

GET /doc_index/_search

POST /doc_index/_bulk
{"index":{}}
{"title":"test2","category":"test","url":"http://localhost:3001"}
{"index":{}}
{"title":"dir","category":"test","url":"http://localhost:3002"}
{"index":{}}
{"title":"ddssd","category":"test","url":"http://localhost:3003"}
{"index":{}}
{"title":"测试","category":"test","url":"http://localhost:3004"}

完善search-ui

search-ui下载下来之后,还没有绑定数据,此时还需要修改app.js来进行适配。

app.js需更改成:

// Step #1, import statements
import React from "react";
// 这里需要注意app和网页的接口名称不一样
import ElasticsearchAPIConnector from "@elastic/search-ui-elasticsearch-connector";
import {
  PagingInfo,
  ResultsPerPage,
  Paging,
  SearchProvider,
  Results,
  SearchBox,
  Sorting
} from "@elastic/react-search-ui";
import { Layout } from "@elastic/react-search-ui-views";
import "@elastic/react-search-ui-views/lib/styles/styles.css";

// Step #2, The connector
const connector = new ElasticsearchAPIConnector({
  host: "http://elasticsearch:9200", // elasticsearch的地址
  apiKey: "WjUxNVpZc0JTb3pYN2J6cEdqRHQ6R3Y0all0R1dTai1LSjhqMGc5THFVdw==", // elasticsearch 的登录秘钥,在kibana上生成
  index: "doc_index" // 要访问的索引的地址
});
 
// Step #3: Configuration options
const configurationOptions = {
  searchQuery: {
    search_fields: {
      title: {
        weight: 3
      },
      url: {},
      category: {}
    },
    result_fields: {
      title: {
        snippet: {}
      },
      url: {
        snippet: {}
      },
      category: {
        snippet: {}
      }
    }
  },
  apiConnector: connector,
  alwaysSearchOnInitialLoad: true
};

// step4 show result 
export default function App() {
  return (
    <SearchProvider config={configurationOptions}>
      <div className="App">
        <Layout
          header={<SearchBox />}
          // 要展示的标题和标题对应的连接
          bodyContent={<Results titleField="title" urlField="url" />}
          bodyHeader={
            <>
              <PagingInfo />
              <ResultsPerPage />
            </>
          }
          bodyFooter={<Paging />}
        />
      </div>
    </SearchProvider>
  );
}

还可以修改一下public下面的title标签,修改成自己的项目标签。如:文章来源地址https://www.toymoban.com/news/detail-717450.html

<title>doc_index</title>

到了这里,关于搭建自己的搜索引擎——oh-my-search使用的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 基于向量数据库搭建自己的搜索引擎

    前言【基于chatbot】 厌倦了商业搜索引擎搜索引擎没完没了的广告,很多时候,只是需要精准高效地检索信息,而不是和商业广告“斗智斗勇”。以前主要是借助爬虫工具,而随着技术的进步,现在有了更多更方便的解决方案,向量数据库就是其中之一【chatGPT也需要它的支撑

    2024年04月11日
    浏览(27)
  • 分享个自己开发的夸克网盘资源搜索引擎

    https://www.cuppaso.com/ 框架使用了 spring boot 全家桶 2.7.1版本 mybatis plus 最新版本3.5.1 es搜索引擎 版本的话是 elasticsearch-7.17.4-windows-x86_64

    2024年02月12日
    浏览(33)
  • 如何让搜索引擎搜索到自己的个人博客网站(如何提交网站到各搜索引擎,如百度、必应Bing,以及提交页面URL的地址)

    之前我写了很多关于 GitHub Pages 和 Jekyll 如何搭建个人博客的博客,但是我忘了这样别人是看不到的。 一个网页能被别人看到的方式有几种: 点开分享的 URL; 点开搜索结果中的链接; … 第一种方法相当古早了,虽然现在还在用,但是在扩大读者/用户数量这方面效率太低了

    2024年02月05日
    浏览(45)
  • jieba 加whooh 构建自己本地数据库的搜索引擎

    例子 实战

    2024年02月10日
    浏览(27)
  • 阿里云盘太小啦,所以自己动手写了一个阿里云盘的搜索引擎

    是不是还在为阿里云盘空间太小而烦恼! 好东西太多,奈何就这么点空间,存不下所有东西,何解? 阿里云盘空间不足的问题也让我头疼,虽然有一些免费的阿里云盘的搜索引擎,但那不是我的! 终于决定了,自己编写一个阿里云盘搜索引擎服务! 先看一下成品图: 如果

    2024年02月13日
    浏览(39)
  • 用了这个新一代 AI 搜索引擎,我感觉自己不会被裁了

    大家好,我是木川 一般遇到问题,都会上百度、Google 等网站找答案,最近发现一个牛逼的搜索引擎网站 Devv.ai,使用 AI 做的,非常适合程序员,排查技术相关问题 Devv.ai 是一款新一代的人工智能搜索引擎,专为程序员设计。该网站的目标是提供更快速、准确的编程解决方案

    2024年02月20日
    浏览(34)
  • docker项目-搭建个人搜索引擎SearXNG

    SearXNG是一个免费的互联网元搜索引擎,它汇总了来自更多 超过 70 个搜索服务。 文档地址:https://docs.searxng.org/ github地址:https://github.com/searxng/searxng Dokcer仓库:https://github.com/searxng/searxng-docker 演示Dome:https://searx.space/# Vps:一台,建议国外vps 系统:任意linux发行版,本文采用

    2024年01月16日
    浏览(27)
  • 超强文档搜索引擎AnyTXT Searcher本地搭建

    你是否遇到过这种情况,异地办公或者不在公司,想找到一篇课件或者想找到某个文件,你只记得资料文件或者课件里的某一句话,却不记得它的名字,你花了大量的时间,大量的精力,却怎么也找不到这个文件在哪个地方,看完本篇文章,希望能解决你的这个问题!Any TX

    2024年01月17日
    浏览(20)
  • 搜索引擎蜘蛛池的原理是什么,蜘蛛池搭建教程?

    💂 个人网站:【海拥】【游戏大全】【神级源码资源网】 🤟 前端学习课程:👉【28个案例趣学前端】【400个JS面试题】 💅 寻找学习交流、摸鱼划水的小伙伴,请点击【摸鱼学习交流群】 搜索引擎蜘蛛池是搜索引擎用来收集和索引网页内容的重要组成部分。本文将介绍搜索

    2024年02月11日
    浏览(45)
  • 文件搜索引擎的搭建Elasticsearch+Fscrawler+SearchUI+Git+Nginx

    搭建一套文档搜索引擎。有时候,我们有一批文档,需要在这批文档中查找想要的内容,此时想要找到文档里面的内容就变的很麻烦。本文将介绍如何搭建一套文档搜索引擎。 一台Cenos 7.x 的服务器 支持Docker NodeJs环境 支持nodejs和npm 安装命令 支持git命令 如下服务均搭建在同

    2024年02月10日
    浏览(35)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包