orama

orama

全方位搜索引擎解决方案,支持多设备多接口使用

Orama提供全文本、向量和混合搜索功能,适用于浏览器、服务器、移动应用和边缘设备,并且体积小于2KB。主要功能包括向量搜索、混合搜索、筛选器、地理搜索、字段提升、容错和精确匹配。通过插件系统,用户可以扩展功能,支持30种语言的词干提取和标记。Orama易于安装和使用,文档详细并有社区支持,是理想的轻量级搜索解决方案。

Orama搜索引擎向量搜索混合搜索GeosearchGithub开源项目
<p align="center"> <img src="https://raw.githubusercontent.com/askorama/orama/main//misc/readme/orama-readme-dark.png#gh-dark-mode-only" /> <img src="https://raw.githubusercontent.com/askorama/orama/main//misc/readme/orama-readme-light.png#gh-light-mode-only" /> </p> <h4 align="center"> <a href="https://askorama.ai?utm_source=github">网站</a> • <a href="https://askorama.ai/blog?utm_source=github">博客</a> • <a href="https://docs.askorama.ai?utm_source=github">文档</a> • <a href="https://orama.to/slack">社区Slack</a> </h4> <br /> <p align="center"> 具有独特API的全文、向量和混合搜索。<br /> 可在您的浏览器、服务器、移动应用或边缘设备上运行。<br /> 仅需不到2kb。 </p> <br /> <p align="center" style="margin-top:5px;margin-bottom:35px"> <img src="https://raw.githubusercontent.com/askorama/orama/main//misc/readme/orama-readme-runtime-dark.png#gh-dark-mode-only" /> <img src="https://raw.githubusercontent.com/askorama/orama/main//misc/readme/orama-readme-runtime-light.png#gh-light-mode-only" /> </p>

测试 NPM下载量 jsDelivr点击量(npm) npm包大小

加入Orama的Slack频道

如果您需要更多信息、帮助或想提供有关Orama的一般反馈,请加入 Orama Slack频道

主要特性

安装

您可以使用npmyarnpnpmbun安装Orama:

npm i @orama/orama

或者直接在浏览器模块中导入:

<html> <body> <script type="module"> import { create, search, insert } from 'https://unpkg.com/@orama/orama@latest/dist/index.js' // ... </script> </body> </html>

使用Deno时,您可以使用相同的CDN URL或使用npm说明符:

import { create, search, insert } from 'npm:@orama/orama'

完整文档请访问https://docs.askorama.ai

使用方法

Orama使用起来相当简单。首先需要创建一个新的数据库实例并设置索引模式:

import { create, insert, remove, search, searchVector } from '@orama/orama' const db = await create({ schema: { name: 'string', description: 'string', price: 'number', embedding: 'vector[1536]', // 向量大小必须在模式初始化时指定 meta: { rating: 'number', }, }, })

Orama目前支持10种不同的数据类型:

类型描述示例
string字符串'Hello world'
number数值,可以是浮点数或整数42
boolean布尔值true
enum枚举值'drama'
geopoint地理坐标点{ lat: 40.7128, lon: 74.0060 }
string[]字符串数组['red', 'green', 'blue']
number[]数值数组[42, 91, 28.5]
boolean[]布尔值数组[true, false, false]
enum[]枚举值数组['comedy', 'action', 'romance']
vector[<size>]用于执行向量搜索的数值向量[0.403, 0.192, 0.830]

Orama只会索引模式中指定的属性,但允许您在需要时设置和存储额外的数据。

创建数据库实例后,您可以开始添加一些文档:

await insert(db, { name: '无线耳机', description: '体验这款噪音消除无线耳机带来的身临其境的音质。', price: 99.99, embedding: [...], meta: { rating: 4.5, }, }) await insert(db, { name: '智能LED灯泡', description: '使用这款节能智能LED灯泡控制家中的照明,兼容大多数智能家居系统。', price: 24.99, embedding: [...], meta: { rating: 4.3, }, }) await insert(db, { name: '便携式充电器', description: '使用这款小巧快速充电的便携式充电器,在外出时永不断电。', price: 29.99, embedding: [...], meta: { rating: 3.6, }, })

插入数据后,您就可以开始查询数据库了。

const searchResult = await search(db, { term: '耳机', })

在上面的例子中,您将搜索所有包含"耳机"一词的文档,查找模式中指定的每个string属性:

{ elapsed: { raw: 99512, formatted: '99μs', }, hits: [ { id: '41013877-56', score: 0.925085832971998432, document: { name: '无线耳机', description: '体验这款噪音消除无线耳机带来的身临其境的音质。', price: 99.99, meta: { rating: 4.5 } } } ], count: 1 }

您还可以将查找限制在特定属性上:

const searchResult = await search(db, { term: '身临其境的音质', properties: ['description'], })

结果:

{ elapsed: { raw: 21492, formatted: '21μs', }, hits: [ { id: '41013877-56', score: 0.925085832971998432, document: { name: '无线耳机', description: '体验这款噪音消除无线耳机带来的身临其境的音质。', price: 99.99, meta: { rating: 4.5 } } } ], count: 1 }

您可以使用非字符串数据来过滤分组和创建分面

const searchResult = await search(db, { term: '身临其境的音质', where: { price: { lte: 199.99 }, rating: { gt: 4 } }, })

执行混合和向量搜索

Orama是一个全文和向量搜索引擎。这使您可以根据特定用例采用不同的搜索范式。

要执行向量或混合搜索,您可以使用与全文搜索相同的search方法。

您只需指定要执行向量搜索的属性,以及用于执行向量相似度的向量:

const searchResult = await searchVector(db, { mode: 'vector', // 或 'hybrid' vector: { value: [...], // 用作输入的OpenAI嵌入或类似向量 property: 'embedding' // 要搜索的属性。向量搜索时必填 } })

如果你正在使用Orama安全AI代理(强烈推荐),你可以在搜索时跳过向量配置,因为官方的Orama安全AI代理插件会自动为你处理:

import { create } from '@orama/orama' import { pluginSecureProxy } from '@orama/plugin-secure-proxy' const secureProxy = secureProxyPlugin({ apiKey: '<你的公共API密钥>', defaultProperty: 'embedding', // 执行向量和混合搜索的默认属性 model: 'openai/text-embedding-ada-002' // 用于生成嵌入的模型 }) const db = await create({ schema: { name: 'string', description: 'string', price: 'number', embedding: 'vector[1536]', meta: { rating: 'number', }, }, plugins: [secureProxy] }) const resultsHybrid = await search(db, { mode: 'vector', // 或 'hybrid' term: '适合对冰淇淋充满热情的小孩子的电子游戏', where: { price: { lte: 19.99 }, 'meta.rating': { gte: 4.5 } } })

执行地理搜索

Orama支持将地理搜索作为搜索过滤器。它将搜索通过schema中指定为geopoint的所有属性:

import { create, insert } from '@orama/orama' const db = await create({ schema: { name: 'string', location: 'geopoint' } }) await insert(db, { name: '米兰大教堂', location: { lat: 45.46409, lon: 9.19192 } }) await insert(db, { name: '大教堂广场', location: { lat: 45.46416, lon: 9.18945 } }) await insert(db, { name: '皇家小广场', location: { lat: 45.46339, lon: 9.19092 } }) const searchResult = await search(db, { term: '大教堂', where: { location: { // 我们想要过滤的属性 radius: { // 我们想要应用的过滤器(在这种情况下:"radius") coordinates: { // 中心坐标 lat: 45.4648, lon: 9.18998 }, unit: 'm', // 测量单位。默认为"m"(米) value: 1000, // 半径长度。在这种情况下,1公里 inside: true // 我们是否想返回半径内或半径外的文档。默认为"true" } } } })

Orama地理搜索API支持基于距离的搜索(通过radius)或基于多边形的搜索(通过polygon)。

默认情况下,Orama将使用Haversine公式来执行地理搜索,但可以通过在radiuspolygon配置中传递highPrecision选项来启用高精度搜索。这将告诉Orama使用Vicenty公式,它对于更长距离的计算更精确。

官方文档中阅读更多内容。

官方文档

完整文档请访问https://docs.askorama.ai

官方Orama插件

编写你自己的插件:https://docs.askorama.ai/open-source/plugins/writing-your-own-plugins

许可证

Orama采用Apache 2.0许可证。

编辑推荐精选

蛙蛙写作

蛙蛙写作

AI小说写作助手,一站式润色、改写、扩写

蛙蛙写作—国内先进的AI写作平台,涵盖小说、学术、社交媒体等多场景。提供续写、改写、润色等功能,助力创作者高效优化写作流程。界面简洁,功能全面,适合各类写作者提升内容品质和工作效率。

AI辅助写作AI工具蛙蛙写作AI写作工具学术助手办公助手营销助手AI助手
Trae

Trae

字节跳动发布的AI编程神器IDE

Trae是一种自适应的集成开发环境(IDE),通过自动化和多元协作改变开发流程。利用Trae,团队能够更快速、精确地编写和部署代码,从而提高编程效率和项目交付速度。Trae具备上下文感知和代码自动完成功能,是提升开发效率的理想工具。

AI工具TraeAI IDE协作生产力转型热门
问小白

问小白

全能AI智能助手,随时解答生活与工作的多样问题

问小白,由元石科技研发的AI智能助手,快速准确地解答各种生活和工作问题,包括但不限于搜索、规划和社交互动,帮助用户在日常生活中提高效率,轻松管理个人事务。

热门AI助手AI对话AI工具聊天机器人
Transly

Transly

实时语音翻译/同声传译工具

Transly是一个多场景的AI大语言模型驱动的同声传译、专业翻译助手,它拥有超精准的音频识别翻译能力,几乎零延迟的使用体验和支持多国语言可以让你带它走遍全球,无论你是留学生、商务人士、韩剧美剧爱好者,还是出国游玩、多国会议、跨国追星等等,都可以满足你所有需要同传的场景需求,线上线下通用,扫除语言障碍,让全世界的语言交流不再有国界。

讯飞智文

讯飞智文

一键生成PPT和Word,让学习生活更轻松

讯飞智文是一个利用 AI 技术的项目,能够帮助用户生成 PPT 以及各类文档。无论是商业领域的市场分析报告、年度目标制定,还是学生群体的职业生涯规划、实习避坑指南,亦或是活动策划、旅游攻略等内容,它都能提供支持,帮助用户精准表达,轻松呈现各种信息。

AI办公办公工具AI工具讯飞智文AI在线生成PPTAI撰写助手多语种文档生成AI自动配图热门
讯飞星火

讯飞星火

深度推理能力全新升级,全面对标OpenAI o1

科大讯飞的星火大模型,支持语言理解、知识问答和文本创作等多功能,适用于多种文件和业务场景,提升办公和日常生活的效率。讯飞星火是一个提供丰富智能服务的平台,涵盖科技资讯、图像创作、写作辅助、编程解答、科研文献解读等功能,能为不同需求的用户提供便捷高效的帮助,助力用户轻松获取信息、解决问题,满足多样化使用场景。

热门AI开发模型训练AI工具讯飞星火大模型智能问答内容创作多语种支持智慧生活
Spark-TTS

Spark-TTS

一种基于大语言模型的高效单流解耦语音令牌文本到语音合成模型

Spark-TTS 是一个基于 PyTorch 的开源文本到语音合成项目,由多个知名机构联合参与。该项目提供了高效的 LLM(大语言模型)驱动的语音合成方案,支持语音克隆和语音创建功能,可通过命令行界面(CLI)和 Web UI 两种方式使用。用户可以根据需求调整语音的性别、音高、速度等参数,生成高质量的语音。该项目适用于多种场景,如有声读物制作、智能语音助手开发等。

咔片PPT

咔片PPT

AI助力,做PPT更简单!

咔片是一款轻量化在线演示设计工具,借助 AI 技术,实现从内容生成到智能设计的一站式 PPT 制作服务。支持多种文档格式导入生成 PPT,提供海量模板、智能美化、素材替换等功能,适用于销售、教师、学生等各类人群,能高效制作出高品质 PPT,满足不同场景演示需求。

讯飞绘文

讯飞绘文

选题、配图、成文,一站式创作,让内容运营更高效

讯飞绘文,一个AI集成平台,支持写作、选题、配图、排版和发布。高效生成适用于各类媒体的定制内容,加速品牌传播,提升内容营销效果。

热门AI辅助写作AI工具讯飞绘文内容运营AI创作个性化文章多平台分发AI助手
材料星

材料星

专业的AI公文写作平台,公文写作神器

AI 材料星,专业的 AI 公文写作辅助平台,为体制内工作人员提供高效的公文写作解决方案。拥有海量公文文库、9 大核心 AI 功能,支持 30 + 文稿类型生成,助力快速完成领导讲话、工作总结、述职报告等材料,提升办公效率,是体制打工人的得力写作神器。

下拉加载更多