Elastic Search:构建语义搜索体验

news2024/11/25 20:41:25

当你逐步熟悉 Elastic 时,你将使用 Elasticsearch Relevance Engine™ (ESRE),该引擎旨在为 AI 搜索应用程序提供支持。 借助 ESRE,你可以利用一套开发人员工具,包括 Elastic 的文本搜索、向量数据库和我们用于语义搜索的专有转换器模型。

Elastic 提供了多种搜索技术,从文本搜索的行业标准 BM25 开始。 它为特定搜索提供精确匹配,匹配精确的关键字,并通过调整进行改进。

当你开始向量搜索时,请记住向量搜索有两种形式:“密集(dense)”(又名 kNN 向量搜索)和 “稀疏(sparse)”,例如 Elastic 的学习稀疏编码器 (ELSER)。

Elastic 还为语义搜索提供了开箱即用的 Learned Sparse Encoder 模型。 该模型在各种数据集上都表现出色,例如财务数据、天气记录、问答对等。 该模型的构建是为了提供跨领域的巨大相关性,而不需要额外的微调。

查看此交互式演示,了解当您根据 Elastic 的文本 BM25 算法测试 Elastic 的学习稀疏编码器模型时,搜索结果如何变得更相关。

此外,Elastic还支持密集向量,对文本以外的非结构化数据(例如视频、图像、音频)实现相似性搜索。

语义搜索和向量搜索的优点在于,这些技术允许客户在搜索查询中使用直观的语言。 例如,如果向想搜索有关第二收入的工作场所指南,你可以搜索 “副业”,这不是你在正式人力资源文件中可能看到的术语。

在本指南中,我们将演示如何创建 Elasticsearch 集群、使用 Elastic Web 爬网程序提取数据以及只需单击几下即可实现语义搜索。

安装

Elasticsearch 

我们可参考我之前的文章 “如何在 Linux,MacOS 及 Windows 上进行安装 Elasticsearch” 来安装 Elasticsearch。特别地,我们需要按照 Elastic Stack 8.x 的安装指南来进行安装。

在 Elasticsearch 终端输出中,找到 elastic 用户的密码和 Kibana 的注册令牌。 这些是在 Elasticsearch 第一次启动时打印的。

我们记下这个密码,并在下面的配置中进行使用。同时它也会生成相应的证书文件:

$ pwd
/Users/liuxg/elastic/elasticsearch-8.12.0
$ cd config/certs/
$ ls
http.p12      http_ca.crt   transport.p12

安装 Kibana

我们接下来安装 Kibana。我们可以参考我之前的文章 “如何在 Linux,MacOS 及 Windows 上安装 Elastic 栈中的 Kibana” 来进行我们的安装。特别地,我们需要安装 Kibana 8.2 版本。如果你还不清楚如何安装 Kibana 8.2,那么请阅读我之前的文章 “Elastic Stack 8.0 安装 - 保护你的 Elastic Stack 现在比以往任何时候都简单”。在启动 Kibana 之前,我们可以修改 Kibana 的配置文件如下。添加如下的句子到 config/kibana.yml 中去:

config/kibana.yml

enterpriseSearch.host: http://localhost:3002

然后,我们使用如下的命令来启动 Kibana:

我们在浏览器中输入上面输出的地址然后输入相应的 enrollment token 就可以把 Kibana 启动起来。

Java安装

你需要安装 Java。版本在 Java 8 或者 Java 11。我们可以参考链接来查找需要的 Java 版本。

App search 安装

我们在地址 Download Elastic Enterprise Search | Elastic 找到我们需要的版本进行下载。并按照页面上相应的指令来进行按照。如果你想针对你以前的版本进行安装的话,请参阅地址 https://www.elastic.co/downloads/past-releases#app-search。

等我们下载完 Enterprise Search 的安装包,我们可以使用如下的命令来进行解压缩:

$ pwd
/Users/liuxg/elastic
$ ls
elasticsearch-8.12.0                       kibana-8.12.0
elasticsearch-8.12.0-darwin-aarch64.tar.gz kibana-8.12.0-darwin-aarch64.tar.gz
enterprise-search-8.12.1.tar.gz            logstash-8.12.0-darwin-aarch64.tar.gz
filebeat-8.12.0-darwin-aarch64.tar.gz      metricbeat-8.12.0-darwin-aarch64.tar.gz
$ tar xzf enterprise-search-8.12.1.tar.gz 
$ cd enterprise-search-8.12.1
$ ls
LICENSE    NOTICE.txt README.md  bin        config     lib        metricbeat

如上所示,它含有一个叫做 config 的目录。我们在启动  Enterprise Search 之前,必须做一些相应的配置。我们需要修改 config/enterprise-search.yml 文件。在这个文件中添加如下的内容:

config/enterprise-search.yml

allow_es_settings_modification: true
secret_management.encryption_keys: ['6c49f8004bfd5cb8c754c8e2f1cbe1f2793624545d052ab48fb37adc481f7d9b']
elasticsearch.username: elastic
elasticsearch.password: "q2rqAIphl-fx9ndQ36CO"
elasticsearch.host: https://127.0.0.1:9200
elasticsearch.ssl.enabled: true
elasticsearch.ssl.certificate_authority: /Users/liuxg/elastic/elasticsearch-8.12.0/config/certs/http_ca.crt
kibana.external_url: http://localhost:5601

在上面,请注意 elasticsearch.password 是我们在 Elasticsearch 安装过程中生成的密码。elasticsearch.ssl.certificate_authority 必须根据自己的 Elasticsearch 安装路径中生成的证书进行配置。在上面的配置中,如果我们没有配置 secret_management.encryption_keys。我们可以使用上面的配置先运行,然后让系统帮我们生成。在配置上面的密码时,我们需要添加上引号。我发现在密码中含有 * 字符会有错误的信息。我们也可以参考链接来生成上面的 secret_management.encryption_keys。

$ openssl rand -hex 32
6c49f8004bfd5cb8c754c8e2f1cbe1f2793624545d052ab48fb37adc481f7d9b

我们使用如下的命令来启动:

bin/enterprise-search

在启动的过程中,我们可以看到生成的用户名及密码信息:

      username: enterprise_search
      password: uy5o6eyssksychcx

我们记下这个用户名及密码。在启动的过程中,我们还可以看到一个生成的 secret_session_key:

我们也把它拷贝下来,并添加到配置文件中去:

allow_es_settings_modification: true
secret_management.encryption_keys: ['6c49f8004bfd5cb8c754c8e2f1cbe1f2793624545d052ab48fb37adc481f7d9b'] 
elasticsearch.username: elastic
elasticsearch.password: "q2rqAIphl-fx9ndQ36CO"
elasticsearch.host: https://127.0.0.1:9200
elasticsearch.ssl.enabled: true
elasticsearch.ssl.certificate_authority: /Users/liuxg/elastic/elasticsearch-8.12.0/config/certs/http_ca.crt
kibana.external_url: http://localhost:5601

secret_session_key: fcb5ecfd38095e81c66a36dd5ee0ea076dcb80d9a7dc7f67d46a19ba2390e07d0c71cb6895d8dba05425aa024f2dbad24fafd7310461cf14aa72492ddc39dde7

feature_flag.elasticsearch_search_api: true

为了能够使得我们能够在 App Search 中使用 Elasticsearch 搜索,我们必须设置
feature_flag.elasticsearch_search_api: true。 我们再次重新启动 enterprise search:

./bin/enterprise-search 

这次启动后,我们再也不会看到任何的配置输出了。这样我们的 enterprise search 就配置好了。

启动白金试用

由于使用 ELSER 需要用到机器学习的功能,我们需要启动白金试用:

部署 ELSER

上面的下载过程讲持续一段时间。这个依赖于你的网络速度。

从上面的显示中,我们可以看出来,ELSER v2 的部署已经是成功的。

配置 Elastic 网络爬虫

现在你已经创建了部署,是时候将数据导入 Elasticsearch 了。 让我们使用 Elastic 的网络爬虫来完成此操作。 首先,在 “Search” 选项卡下,

要设置网络爬虫,请查看此指南或按照以下说明操作:

现在创建一个索引。 为了本指南的目的,我们通过 elastic.co 摄取博客。

为索引命名后,选择 “Create inddex”。 接下来,你将 Validate Domain,然后选择 Add domain。

在右下角添加域后,你将选择 “Edit”,以便你可以根据需要添加 subdomain。

接下来,您将选择抓取规则并添加抓取规则,如下所示 .*

我们将提供抓取规则,以仅定位包含整个 elastic.co 网站上的博客的页面。由于你要抓取的页面将有链接到的页面,因此你应该添加附加规则以禁止这些链接和任何其他链接。

接下来,当你稍后选择字段时,某些字段会超过 512 个标记计数,例如 body_content。 你应该利用提取规则仅过滤掉博客的相关部分。我们将配置一个提取规则,以便仅提取 “main” 页面元素的内容,该元素包含要爬网的每个博客文章的内容。

使用 Elastic Learned Sparse Encoder 丰富你的数据

按照以下说明开始使用 Elastic Learned Sparse Encoder(Elastic 的开箱即用语义搜索模型)。

为此,你将选择 Pipeline 并通过选择顶部的 Copy and customize 来 Unlock your custom pipelines。 接下来,在 Machine Learning Inference Pipelines下,选择 Deploy 以下载模型并将其安装到你的 Elasticsearch 部署中。

现在,你需要选择要应用  ELSER text expansion 的字段。 选择 “title” 和 “main” 作为源字段,然后添加。

接下来,单击 Continue。

现在你已经创建了 pipeline,请选择右上角的 “Crawl”,然后选择 “Crawl all domains on this index”。

我们需要一定的时间才能完成。

为了能够验证我们是否已经正确地配置了 Crawler,我们可以在 Kibana 中进行查看:

从上面的输出中,我们可以看到我们的配置是正确的。我们可以看到想要的字段已经相应的 text expansion 字段。

整个网站的爬虫是需要一定的时间。我们需要耐心等待。

使用 Elasticsearch

创建搜索查询

现在是时候搜索你要查找的信息了。 有两种推荐的方法可以做到这一点:第一种是使用开发工具。 如果你是正在实施搜索(即针对你的 Web 应用程序)的开发人员,你应该使用开发工具来测试和优化索引数据的搜索结果。

在下面,我们了解如何利用开发工具。

GET search-blogs/_search
{
  "_source": [
    "title"
   ],
   "query": {
     "multi_match": {
       "query": "Implement a vector database",
       "fields": ["title", "main"]
     }
   }
}

这是一个正常的搜索。它没有使用向量搜索。

接下来,我们使用 ELSER 来进行向量搜索:

GET search-blogs/_search
{
  "_source": [
    "title"
  ],
  "query": {
    "text_expansion": {
      "ml.inference.main_expanded.predicted_value": {
        "model_id": ".elser_model_2",
        "model_text": "Implement a vector database"
      }
    }
  }
}

从上面的搜索结果上看,我们可以看到搜索的结果有一点不一样。通常向量搜索可以带给我们更好的语义搜索的结果。

使用 kNN 向量搜索进行摄取和搜索 

我们可以阅读文章 “ChatGPT 和 Elasticsearch:OpenAI 遇见私有数据(二)” 以了解更多。

更多阅读:Enterprise:Web Crawler 基础 (一) (二) 

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

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

相关文章

stm32单片机的开发工具介绍

(本文为简单介绍,内容源于网络) STM32单片机是一种高性能、低功耗、易于开发的微控制器,广泛应用于各种智能设备和嵌入式系统中。为了更方便地开发STM32单片机应用程序,ST公司提供了一系列开发工具和软件包。本文将介…

护眼台灯哪个牌子比较好?五个包括品牌专业推荐!

相信寒假结束后,不少家长都在为孩子挑选护眼台灯。现在护眼台灯已经成为绝大数孩子书桌上都会有的灯具,但快速发展的市场背后,也确实存在很多劣质产品,比如小作坊生产、贴牌产品等等,这类产品研发实力过低,…

Socks5代理IP详解:优势与应用场景

Socks5代理IP作为网络代理技术的前沿选择,其在多方面的优势使其在2024年成为了热门选择。 一、Socks5代理IP的核心特性 1、Socks5代理IP与其他代理类型的比较 HTTP代理设计用于web浏览,仅支持HTTP和HTTPS协议。 Socks4代理支持更多类型的网络协议&…

【鸿蒙 HarmonyOS 4.0】开发工具安装

一、准备开发环境 1.1、安装IDE 鸿蒙应用开发需要使用配套的IDE——HUAWEI DevEco Studio。 DevEco Studio基于IntelliJ IDEA Community(IDEA社区版)构建,为鸿蒙应用提供了一站式开发环境,集成了开发、运行、调试以及发布应用的…

大模型学习笔记三:Function Calling

文章目录 一、命令UI界面进化和Plugins的发展及失败二、Function Calling的机制1)示例 1:调用本地函数2)示例 2:多 Function 调用3)示例 3:用 Function Calling 获取 JSON 结构4)示例 4&#xf…

完整分析CRM管理系统的功能,详细说明!

很多使用过CRM管理系统的人都表示,一旦尝试使用客户管理系统进行业务处理之后,就再也离不开了。那么,客户管理系统究竟有什么魔力?以下是CRM管理系统的功能详解。 虽然CRM是围绕客户管理展开的,然而经过这么多年的发展…

五、分类算法 总结

代码: from sklearn.datasets import load_iris, fetch_20newsgroups from sklearn.feature_extraction.text import TfidfVectorizer from sklearn.model_selection import train_test_split, GridSearchCV from sklearn.naive_bayes import MultinomialNB from s…

【FreeRTOS基础入门】事件组与同步点

文章目录 前言一、事件组是什么案例1.1 事件组的概念 二、事件组的操作2.1 事件组与其他实现同步与互斥方法的区别2.2 创建事件组2.3 删除事件组2.4 设置事件2.5 等待事件2.6 示例代码 三、同步点3.1 同步点是什么3.2 设置同步点 总结 前言 FreeRTOS是一个广泛应用于嵌入式系统…

vue3中使用 tui-image-editor进行图片处理,并上传

效果图 下载包 pnpm i tui-image-editor pnpm i tui-color-picker调用组件 //html部分 <el-dialog v-model"imgshow" destroy-on-close width"40%" draggable align-center :show-close"true":close-on-click-modal"false">&l…

windows极限摸鱼软件(仅6678kb)

时间过得真快啊&#xff0c;不知不觉春节假期就过完了。你已经开始工作了吗&#xff1f;反正我是一直没闲着。 歇的时间久了&#xff0c;一上班这节奏很难一下子转换过来。也可能刚上班&#xff0c;没什么事情做&#xff0c;有点无聊。 &#xff08;好吧&#xff0c;我承认了…

Java 面向对象进阶 11 多态的优势和弊端(黑马)

优势&#xff1a; 代码&#xff1a; public class test {public static void main(String[] args) {Animal a new Dog();a.eat(); } } class Animal{public void eat(){System.out.println("动物再吃东西");} } class Dog extends Animal{Overridepublic void eat(…

如何修改unity的背景颜色

要在Unity中将背景颜色设为黑色&#xff0c;可以按照以下步骤进行&#xff1a; 1、在Unity编辑器中&#xff0c;选择你想要修改背景颜色的摄像机对象&#xff08;一般是Main Camera&#xff09;。 2、在Inspector面板中&#xff0c;找到"Clear Flags"&#xff08;清…

Leetcode155(设计最小栈)

例题&#xff1a; 分析&#xff1a; 题目要求我们必须在常数时间内检索到最小元素。 我们可以使用两个栈&#xff08;A、B&#xff09;来实现&#xff0c;A栈用来正常存储数据、弹出数据&#xff0c; B栈用于存储A栈中的最小元素&#xff0c;如下图&#xff1a; 刚开始&#…

三十年一个大轮回!日股突破“泡沫时期”历史高点

2月22日周四&#xff0c;英伟达四季报业绩超预期&#xff0c;而且本季度业绩指引非常乐观&#xff0c;提振美股股指期货并成为芯片股和AI概念股情绪的重要催化剂。今日亚洲芯片股和AI股起飞&#xff0c;日本在芯片股的带动下突破1989年泡沫时期以来的历史最高收盘价。 美股方面…

SqlServer2016离线安装--Microsoft R Open 和 Microsoft R Server安装文件位置

问题 SQL SERVE 2016离线安装&#xff0c;会出现“Microsoft R Open 和 Microsoft R Server 脱机安装”的界面&#xff0c; 无法点击下一步的情况&#xff0c;如下图&#xff1a; 原因 离线安装时需要下载两个文件 解决方案 1、访问路径下载文件 https://go.microsoft.c…

MATLAB 导出可编辑的eps格式图像

任务描述&#xff1a;部分期刊要求提交可编辑的eps格式图像&#xff0c;方便美工编辑对图像进行美化 我试了直接print或者在figure窗口导出&#xff0c;发现导出的文件放到Adobe AI中并不能编辑&#xff0c;经Google找到解决办法&#xff1a; %EPS exportgraphics(gcf,myVect…

Nginx基础入门

一、Nginx的优势 nginx是一个高性能的HTTP和反向代理服务器&#xff0c;也是一个SMTP&#xff08;邮局&#xff09;服务器。 Nginx的web优势&#xff1a;IO多路复用&#xff0c;时分多路复用&#xff0c;频分多路复用 高并发&#xff0c;IO多路复用&#xff0c;epoll&#xf…

2024年1月手机市场行业分析:苹果手机份额骤降,国产高端手机成功逆袭!

小米Ultra发布。 一方面&#xff0c;我们有望看到国产手机再一次超越自己的决心&#xff0c;继续创新追逐高端&#xff1b;另一方面&#xff0c;我们也不得不正视目前手机市场所面临的危机状态。 2024年1月的线上手机市场远不如去年。根据鲸参谋数据显示&#xff0c;今年1月京…

linux系统内核升级

1.查看旧版本内核 2.导入密钥 rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org 3.安装yum源 rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-2.el7.elrepo.noarch.rpm4.启用elrepo-kernel仓库并安装最新内核版本 yum --enablerepoelrepo-kernel install …

【AIGC】开源音频工具AudioCraft

AudioCraft是一个开源框架&#xff0c;旨在生成高质量的音频&#xff0c;适用于音乐、声音生成和压缩等多种应用。 先听效果&#xff1a; aimusic 它由三个模型组成&#xff1a;MusicGen、AudioGen和EnCodec。 *MusicGen&#xff1a;*这个模型使用了Meta拥有和特别许可的音乐进…