Project Icon

orama

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

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

网站博客文档社区Slack


具有独特API的全文、向量和混合搜索。
可在您的浏览器、服务器、移动应用或边缘设备上运行。
仅需不到2kb。


测试 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许可证。

项目侧边栏1项目侧边栏2
推荐项目
Project Cover

豆包MarsCode

豆包 MarsCode 是一款革命性的编程助手,通过AI技术提供代码补全、单测生成、代码解释和智能问答等功能,支持100+编程语言,与主流编辑器无缝集成,显著提升开发效率和代码质量。

Project Cover

AI写歌

Suno AI是一个革命性的AI音乐创作平台,能在短短30秒内帮助用户创作出一首完整的歌曲。无论是寻找创作灵感还是需要快速制作音乐,Suno AI都是音乐爱好者和专业人士的理想选择。

Project Cover

有言AI

有言平台提供一站式AIGC视频创作解决方案,通过智能技术简化视频制作流程。无论是企业宣传还是个人分享,有言都能帮助用户快速、轻松地制作出专业级别的视频内容。

Project Cover

Kimi

Kimi AI助手提供多语言对话支持,能够阅读和理解用户上传的文件内容,解析网页信息,并结合搜索结果为用户提供详尽的答案。无论是日常咨询还是专业问题,Kimi都能以友好、专业的方式提供帮助。

Project Cover

阿里绘蛙

绘蛙是阿里巴巴集团推出的革命性AI电商营销平台。利用尖端人工智能技术,为商家提供一键生成商品图和营销文案的服务,显著提升内容创作效率和营销效果。适用于淘宝、天猫等电商平台,让商品第一时间被种草。

Project Cover

吐司

探索Tensor.Art平台的独特AI模型,免费访问各种图像生成与AI训练工具,从Stable Diffusion等基础模型开始,轻松实现创新图像生成。体验前沿的AI技术,推动个人和企业的创新发展。

Project Cover

SubCat字幕猫

SubCat字幕猫APP是一款创新的视频播放器,它将改变您观看视频的方式!SubCat结合了先进的人工智能技术,为您提供即时视频字幕翻译,无论是本地视频还是网络流媒体,让您轻松享受各种语言的内容。

Project Cover

美间AI

美间AI创意设计平台,利用前沿AI技术,为设计师和营销人员提供一站式设计解决方案。从智能海报到3D效果图,再到文案生成,美间让创意设计更简单、更高效。

Project Cover

稿定AI

稿定设计 是一个多功能的在线设计和创意平台,提供广泛的设计工具和资源,以满足不同用户的需求。从专业的图形设计师到普通用户,无论是进行图片处理、智能抠图、H5页面制作还是视频剪辑,稿定设计都能提供简单、高效的解决方案。该平台以其用户友好的界面和强大的功能集合,帮助用户轻松实现创意设计。

投诉举报邮箱: service@vectorlightyear.com
@2024 懂AI·鲁ICP备2024100362号-6·鲁公网安备37021002001498号