⍼ Resin 搜索引擎
Resin 是一个远程 HTTP 搜索引擎和嵌入式库
Resin 是一个基于向量空间索引的搜索引擎,可作为 HTTP 服务或嵌入式库使用。
如何使用
远程写入文档
HTTP POST [host]/write?collection=[collection]
(例如:http://localhost/write?collection=mycollection)
Content-Type: application/json
[
{
"field1": "value1",
"field2": "value2"
}
]
本地写入文档
using (var database = new DocumentDatabase<string>(_directory, collectionId, model, strategy))
{
foreach (var document in documents)
{
database.Write(document);
}
database.Commit();
}
查询
GET 查询
HTTP GET [host]/query/?collection=mycollection&q=[my_query]&field=field1&field=field2&select=field1&skip=0&take=10
(例如:http://localhost/write?collection=mycollection&q=value1&field=field1&field=field2&select=field1&skip=0&take=10)
Accept: application/json
POST 查询
HTTP POST [host]/query/?select=field1&skip=0&take=10
Content-Type: application/json
Accept: application/json
{
"and":
{
"collection": "film,music",
"title": "rocky eye of the tiger",
"or":
{
"title": "rambo",
"or":
{
"title": "cobra"
"or":
{
"cast": "antonio banderas"
}
}
},
"and":
{
"year": 1980,
"operator": "gt"
},
"not":
{
"title": "first blood"
}
}
}
本地查询
using (var database = new DocumentDatabase<string>(_directory, collectionId, model, strategy))
{
var queryParser = database.CreateQueryParser();
var query = queryParser.Parse(collectionId, word, "title", "title", and:true, or:false, label:true);
var result = database.Read(query, skip: 0, take: 1);
}
文档数据库
Resin 将数据存储为文档集合。在您写入和查询数据时,它会将您首选的 IModel
基于向量的索引
Resin 索引是二叉搜索树,在您用数据填充它们时,它们会创建相互相似的向量簇。 当一个节点被添加到图中时,其余弦角(即与其他节点的相似度)决定了它在图中的位置(路径)。
性能
目前,维基百科大小的数据集可以生成能够进行亚秒级短语搜索的索引。
您还可以
- 使用命令行工具 Sir.Cmd 构建、验证和优化索引
- 通过指定要在 JSON 结果中返回的字段来高效读取
- 如果 JSON 不适合您的用例,可以实现 XML(或任何其他)等消息格式
- 构建在字段之间甚至集合之间进行连接的查询,可以将其作为 JSON 发布到读取端点或以编程方式创建
- 使用稀疏或密集向量,构建任何类型的索引方案,生成任何类型的嵌入,维度几乎不受限制