当前位置: 首页 > news >正文

Typesense:开源的高速搜索引擎

在当今数据驱动的世界中,高效、快速且智能的搜索能力是任何应用程序和网站成功的关键因素之一。无论是电商平台、内容管理系统还是社交媒体,用户都希望能够迅速找到所需信息。Typesense,作为一款优秀的开源搜索引擎,旨在通过其卓越的性能和简便易用的特性,为开发者和企业提供强大的搜索解决方案。本文将深入探讨 Typesense 的主要特点及其在实际应用中的一些示例。

主要特点

1. 拼写错误容忍度:开箱即用,优雅地处理拼写错误

在搜索过程中,用户的输入往往可能出现拼写错误。Typesense 具有高容错性,它能够自动处理拼写错误并返回最相关的结果,提高了用户体验。这意味着即使用户输入的关键词不完全正确,Typesense 也能智能判断并提供建议。

2. 简单而令人愉快

Typesense 的安装和集成过程非常简单。它只需几步即可配置完成,开发者几乎不需要费力学习复杂的 API。无论是在本地开发环境还是云端部署,Typesense 都能轻松上手。

3. 速度超快

Typesense 使用 C++ 编写,从根本上优化了搜索引擎的性能。它能够做到低延迟(响应时间小于 50ms)的即时搜索,这对于实时应用至关重要。

4. 可调排名

关于搜索结果的排名,Typesense 允许开发者根据自己的需求自定义结果的排序方式。这意味着开发者可以轻松实现功能,例如“按价格排序(升序)”,以便为用户提供个性化的搜索体验。

5. 分面和过滤

Typesense 支持以分面和过滤的方式深入挖掘搜索结果。用户可以根据不同的属性(如价格、分类等)快速筛选出相关内容,提升了搜索的有效性。

6. 联合搜索

在需要在多个数据集合中进行搜索时,Typesense 的联合搜索功能能够让开发者在一个 HTTP 请求中跨多个集合(索引)进行高效搜索。这使得在复杂应用中仍能保持良好的性能。

7. 地理搜索

Typesense 支持根据用户的地理位置(纬度和经度)返回结果。这一功能非常适合需要基于位置服务的应用。

8. 向量搜索

Typesense 还支持向量搜索,可将机器学习模型生成的嵌入索引并进行最近邻搜索。这对于实现相似性搜索、语义搜索等应用场景如推荐系统至关重要。

9. 语义/混合搜索

Typesense 提供内置模型(如 S-BERT、E-5)生成嵌入,支持使用 OpenAI、PaLM API 等进行查询和索引数据,构建更深层次的语义搜索体验。

10. 同义词管理

Typesense 允许开发者定义同义词,以便用户在搜索某个词时也能检索到其同义词的结果,进一步提升了搜索的灵活性。

11. 基于Raft的集群

Typesense 基于 Raft 协议支持高可用性的分布式集群,确保数据的一致性和可用性。

12. 分面和过滤:

深入挖掘并细化结果。

13 分组和区分:

将相似的结果分组在一起以显示更多变化。

对话式搜索(内置 RAG):

根据您在 Typesense 中索引的数据,将问题发送到 Typesense,并让响应成为完整的句子。想想 ChatGPT,但基于您自己的数据。

图像搜索:

使用 CLIP 模型,通过图像内容的文本描述来搜索图像,或者执行相似性搜索。

语音搜索:

通过语音记录捕获并发送查询 - Typesense 将转录(通过 Whisper 模型)并提供搜索结果。

范围 API 密钥:

为多租户应用程序生成仅允许访问某些记录的 API 密钥。

JOIN:

通过公共引用字段连接一个或多个集合,并在查询时将它们连接起来。这允许您优雅地对类似 SQL 的关系进行建模。

实践案例

为了更好地理解 Typesense 的功能,以下是如何在一个简单的电商应用中使用 Typesense 的具体示例。

1. 安装和配置

首先,安装 Typesense,可以使用 Docker 快速启动:

docker run -d -p 8108:8108 \-v typesense-data:/data \typesense/typesense:latest \--data-dir /data \--api-key=xyz

2. 创建索引

对于一个电商应用,我们可以创建一个产品索引,包含产品的基本信息,如名称、描述和价格:

curl -X POST "http://localhost:8108/indexes" \
-H "X-TYPESENSE-API-KEY: xyz" \
-H "Content-Type: application/json" \
-d '{"name": "products","fields": [{"name": "id", "type": "int32"},{"name": "name", "type": "string"},{"name": "description", "type": "string"},{"name": "price", "type": "float"}]}'

3. 添加文档

将产品信息添加到索引中:

curl -X POST "http://localhost:8108/indexes/products/documents/import" \
-H "X-TYPESENSE-API-KEY: xyz" \
-H "Content-Type: application/json" \
-d '[{"id": 1, "name": "Apple iPhone 14", "description": "最新款的苹果手机", "price": 999.00},{"id": 2, "name": "Samsung Galaxy S21", "description": "高性能的安卓手机", "price": 799.00},{"id": 3, "name": "Google Pixel 6", "description": "出色的摄影手机", "price": 599.00}]'

4. 搜索产品

用户可以通过关键词搜索产品。如果用户输入“iPhone”或者拼写错误的“ipone”,Typesense 都会优雅地处理并返回相关结果:

curl -X GET "http://localhost:8108/indexes/products/documents/search" \
-H "X-TYPESENSE-API-KEY: xyz" \
-H "Content-Type: application/json" \
-d '{"q": "ipone","query_by": "name,description","sort_by": "price:asc"}'

5. 分面和过滤

假如电商应用希望根据价格区间过滤产品,Typesense提供很好的支持:

curl -X GET "http://localhost:8108/indexes/products/documents/search" \
-H "X-TYPESENSE-API-KEY: xyz" \
-H "Content-Type: application/json" \
-d '{"q": "*","query_by": "name,description","facet_by": "price","filter_by": "price: [500..1000]"}'

Typesense 的应用场景

网站搜索

Typesense 最常见的应用场景之一是网站搜索。许多企业希望用户能够快速找到他们所需的信息,从而提高用户体验和转化率。例如,一个电子商务网站可以利用 Typesense 来实现快速的产品搜索。

数据库搜索

对于数据量庞大的应用,Typesense 也可以用作数据库搜索工具。其高速检索能力能够帮助用户在复杂信息中迅速找到相关内容。

文档搜索

Typesense 可以帮助用户实现大规模文档的搜索功能。无论是技术文档、知识库还是用户手册,Typesense 都能提供高效的检索体验。

结语

Typesense 是一款强大且灵活的搜索引擎,适合面向多种应用场景的企业。无论是支持中文搜索、拼写错误容忍,还是向量搜索和地理搜索,其功能都在不断地扩展与优化。通过上述示例,相信读者已经对如何在实际项目中使用 Typesense 形成了更加清晰的认识。如果你正在寻找一个简单、快速且功能丰富的搜索解决方案,Typesense 无疑是一个值得考虑的选择。

相关文章:

Typesense:开源的高速搜索引擎

在当今数据驱动的世界中,高效、快速且智能的搜索能力是任何应用程序和网站成功的关键因素之一。无论是电商平台、内容管理系统还是社交媒体,用户都希望能够迅速找到所需信息。Typesense,作为一款优秀的开源搜索引擎,旨在通过其卓越…...

【vue】圆环呼吸灯闪烁效果(模拟扭蛋机出口处灯光)

效果图先发&#xff1a; 页面部分&#xff1a; <div ref"round" class"round"><div class"light" ref"light"/><div class"box"></div></div>js部分(控制圆环生成&#xff09;; setRound…...

飞牛 fnos 使用docker部署 Watchtower 自动更新 Docker 容器

Watchtower 简介 Watchtower 是一款开源的 Docker 容器管理工具&#xff0c;主要功能为自动更新运行中的 Docker 容器&#xff0c;支持自动拉取镜像并更新容器、配置邮件通知以及定时执行容器更新任务。 用 compose 搭建 Watchtower 的步骤 新建文件夹&#xff1a;在任意位置…...

《信管通低代码信息管理系统开发平台》Linux环境安装说明

1 简介 信管通低代码信息管理系统应用平台提供多环境软件产品开发服务&#xff0c;包括单机、局域网和互联网。我们专注于适用国产硬件和操作系统应用软件开发应用。为事业单位和企业提供行业软件定制开发&#xff0c;满足其独特需求。无论是简单的应用还是复杂的系统&#xff…...

基于物联网的车辆定位和防盗报警系统(论文+源码)

1 系统概述 本文的主要内容是设计一个基于物联网的车辆定位和防盗报警系统&#xff0c;主要是利用STC89C52单片机来作为整体的核心控制元件&#xff0c;主要的核心控制模块主要由GSM通信模块&#xff0c;GPS定位模块&#xff0c;热释电红外检测模块&#xff0c;报警模块以及其他…...

京东零售数据可视化平台产品实践与思考

导读 本次分享题目为京东零售数据可视化平台产品实践与思考。 主要包括以下四个部分&#xff1a; 1. 平台产品能力介绍 2. 业务赋能案例分享 3. 平台建设挑战与展望 作者&#xff1a;梁臣 京东 数据产品架构师 01平台产品能力介绍 1. 产品矩阵 数据可视化产品是一种利用…...

Vue中使用a标签下载静态资源文件(比如excel、pdf等),纯前端操作

第一步&#xff0c;public文件夹下新建static文件夹存放静态资源 我存放了一个 .docx文件&#xff0c;当然&#xff0c;你可以存放pdf/word 等文件都可以。 第二步&#xff0c;模拟a标签下载 //html部分<el-button type"primary" plain click"download&quo…...

ensp 基于EASY IP的公司出口链路配置

Easy IP Easy IP技术是NAPT的一种简化情况。Easy IP无须建立公网IP地址资源池&#xff0c;因为Easy IP只会用到一个公网IP地址&#xff0c;该IP地址就是路由器R连接公网的出口IP地址。Easy IP也会建立并维护一张动态地址及端口映射表&#xff0c;并且Easy IP会将这张表中的公网…...

方正畅享全媒体采编系统reportCenter.do接口SQL注入漏洞复现 [附POC]

文章目录 方正畅享全媒体采编系统reportCenter.do接口SQL注入漏洞复现 [附POC]0x01 前言0x02 漏洞描述0x03 影响版本0x04 漏洞环境0x05 漏洞复现1.访问漏洞环境2.构造POC3.复现方正畅享全媒体采编系统reportCenter.do接口SQL注入漏洞复现 [附POC] 0x01 前言 免责声明:请勿利…...

零知识证明:区块链隐私保护的变革力量

&#x1f9d1; 博主简介&#xff1a;CSDN博客专家&#xff0c;历代文学网&#xff08;PC端可以访问&#xff1a;https://literature.sinhy.com/#/literature?__c1000&#xff0c;移动端可微信小程序搜索“历代文学”&#xff09;总架构师&#xff0c;15年工作经验&#xff0c;…...

解决:el-select可输入时失焦会失去输入框中值

1、展示部分 <template><el-select v-model"addForm.companyName" filterable placeholder"请输入/选择公司名称" :loading"loading":filter-method"(value) > dataFilter(value)" change"selectCompany">&…...

ollama-webui - Ollama的ChatGPT 风格的 Web 界面

更多AI开源软件&#xff1a; 发现分享好用的AI工具、AI开源软件、AI模型、AI变现 - &#xff1a;发现分享好用的AI工具、AI开源软件、AI模型。收录了AI搜索引擎&#xff0c;AI绘画工具、AI对话聊天、AI音频工具、AI图片工具、AI视频工具、AI内容检测、AI法律助手、AI高考、AI志…...

「下载」智慧产业园区-数字孪生建设解决方案:重构产业全景图,打造虚实结合的园区数字化底座

数字孪生技术作为一种创新的管理工具&#xff0c;正逐步展现出其在智慧园区建设中的重要意义。以下将从几个方面详细阐述数字孪生在智慧园区建设中的关键作用。 一、提升园区运营管理的智能化水平 数字孪生技术通过构建园区的虚拟镜像&#xff0c;实现了对园区物理世界的全面…...

使用Grafana中按钮插件实现收发HTTP请求

最近项目中需要监控分布式集群的各项指标信息&#xff0c;需要用到PrometheusGrafana的技术栈实现对分布式集群的各个节点状态进行可视化显示&#xff0c;但是要求前端需要提供一个易用的接口让用户可以触发一些操作&#xff0c;例如负载高时进行负载均衡或弹性伸缩。网上找到的…...

【附源码】Electron Windows桌面壁纸开发中的 CommonJS 和 ES Module 引入问题以及 Webpack 如何处理这种兼容

背景 在尝试让 ChatGPT 自动开发一个桌面壁纸更改的功能时&#xff0c;发现引入了一个 wallpaper 库&#xff0c;这个库的入口文件是 index.js&#xff0c;但是 package.json 文件下的 type:"module"&#xff0c;这样造成了无论你使用 import from 还是 require&…...

Elasticsearch介绍及安装部署

Elasticsearch介绍 Elasticsearch 是一个分布式搜索引擎&#xff0c;底层基于 Lucene 实现。Elasticsearch 屏蔽了 Lucene 的底层细节&#xff0c;提供了分布式特性&#xff0c;同时对外提供了 Restful API。Elasticsearch 以其易用性迅速赢得了许多用户&#xff0c;被用在网站…...

物理层知识要点

文章目录 物理层接口的四大特性通信基础编码和调制&#xff08;1&#xff09;数字数据编码为数字信号&#xff08;2&#xff09;模拟数据编码为数字信号&#xff08;3&#xff09;常见调制方式&#xff08;3&#xff09;信道的极限容量 多路复用技术数据传输方式物理层下的传输…...

SpringBoot 自动装配原理及源码解析

目录 一、引言 二、什么是 Spring Boot 的自动装配 三、自动装配的核心注解解析 3.1 SpringBootApplication 注解 &#xff08;1&#xff09;SpringBootConfiguration&#xff1a; &#xff08;2&#xff09;EnableAutoConfiguration&#xff1a; &#xff08;3&#xf…...

Craft CMS 模板注入导致 Rce漏洞复现(CVE-2024-56145)(附脚本)

0x01 产品描述: ‌Craft CMS‌ 是一个灵活且强大的内容管理系统(CMS),专为创意团队和开发人员设计,提供高度可定制、直观且性能优越的网站和内容管理解决方案。它以用户友好的界面、强大的插件生态系统以及支持现代web开发最佳实践的特性而闻名‌0x02 漏洞描述: 由于模板…...

Next.js 新手容易犯的错误 _ 加载与缓存管理的关键(5)

1 错误地处理搜索参数&#xff08;Search Params&#xff09; 问题是什么&#xff1f; 在 Next.js 中&#xff0c;搜索参数指的是 URL 中用 ?keyvalue 表示的部分&#xff0c;比如 https://example.com/products?colorred 中的 colorred。这通常用于过滤、排序或选择某些选…...

装饰模式(Decorator Pattern)重构java邮件发奖系统实战

前言 现在我们有个如下的需求&#xff0c;设计一个邮件发奖的小系统&#xff0c; 需求 1.数据验证 → 2. 敏感信息加密 → 3. 日志记录 → 4. 实际发送邮件 装饰器模式&#xff08;Decorator Pattern&#xff09;允许向一个现有的对象添加新的功能&#xff0c;同时又不改变其…...

QMC5883L的驱动

简介 本篇文章的代码已经上传到了github上面&#xff0c;开源代码 作为一个电子罗盘模块&#xff0c;我们可以通过I2C从中获取偏航角yaw&#xff0c;相对于六轴陀螺仪的yaw&#xff0c;qmc5883l几乎不会零飘并且成本较低。 参考资料 QMC5883L磁场传感器驱动 QMC5883L磁力计…...

线程与协程

1. 线程与协程 1.1. “函数调用级别”的切换、上下文切换 1. 函数调用级别的切换 “函数调用级别的切换”是指&#xff1a;像函数调用/返回一样轻量地完成任务切换。 举例说明&#xff1a; 当你在程序中写一个函数调用&#xff1a; funcA() 然后 funcA 执行完后返回&…...

深入理解JavaScript设计模式之单例模式

目录 什么是单例模式为什么需要单例模式常见应用场景包括 单例模式实现透明单例模式实现不透明单例模式用代理实现单例模式javaScript中的单例模式使用命名空间使用闭包封装私有变量 惰性单例通用的惰性单例 结语 什么是单例模式 单例模式&#xff08;Singleton Pattern&#…...

基于当前项目通过npm包形式暴露公共组件

1.package.sjon文件配置 其中xh-flowable就是暴露出去的npm包名 2.创建tpyes文件夹&#xff0c;并新增内容 3.创建package文件夹...

JUC笔记(上)-复习 涉及死锁 volatile synchronized CAS 原子操作

一、上下文切换 即使单核CPU也可以进行多线程执行代码&#xff0c;CPU会给每个线程分配CPU时间片来实现这个机制。时间片非常短&#xff0c;所以CPU会不断地切换线程执行&#xff0c;从而让我们感觉多个线程是同时执行的。时间片一般是十几毫秒(ms)。通过时间片分配算法执行。…...

深入解析C++中的extern关键字:跨文件共享变量与函数的终极指南

&#x1f680; C extern 关键字深度解析&#xff1a;跨文件编程的终极指南 &#x1f4c5; 更新时间&#xff1a;2025年6月5日 &#x1f3f7;️ 标签&#xff1a;C | extern关键字 | 多文件编程 | 链接与声明 | 现代C 文章目录 前言&#x1f525;一、extern 是什么&#xff1f;&…...

python执行测试用例,allure报乱码且未成功生成报告

allure执行测试用例时显示乱码&#xff1a;‘allure’ &#xfffd;&#xfffd;&#xfffd;&#xfffd;&#xfffd;ڲ&#xfffd;&#xfffd;&#xfffd;&#xfffd;ⲿ&#xfffd;&#xfffd;&#xfffd;Ҳ&#xfffd;&#xfffd;&#xfffd;ǿ&#xfffd;&am…...

人机融合智能 | “人智交互”跨学科新领域

本文系统地提出基于“以人为中心AI(HCAI)”理念的人-人工智能交互(人智交互)这一跨学科新领域及框架,定义人智交互领域的理念、基本理论和关键问题、方法、开发流程和参与团队等,阐述提出人智交互新领域的意义。然后,提出人智交互研究的三种新范式取向以及它们的意义。最后,总结…...

【电力电子】基于STM32F103C8T6单片机双极性SPWM逆变(硬件篇)

本项目是基于 STM32F103C8T6 微控制器的 SPWM(正弦脉宽调制)电源模块,能够生成可调频率和幅值的正弦波交流电源输出。该项目适用于逆变器、UPS电源、变频器等应用场景。 供电电源 输入电压采集 上图为本设计的电源电路,图中 D1 为二极管, 其目的是防止正负极电源反接, …...