完整的堆栈矢量搜索是为JSTOR开源文章构建的 - 按含义而不是关键字搜索!
使用Pinecone Vector数据库,嵌入式的拥抱面/变压器和具有两个端点的FastAPI API制成的后端,可在有或没有元数据过滤器的情况下进行查询。用react.js制成的前端
该项目旨在与JSTOR官方数据合作伙伴星座构建的本地数据集一起使用JSONL格式从完整的数据下载选项中使用。
目前,将文章的标题和字幕组合在一起和嵌入,并从查询到这些嵌入式标题和字幕的语义相似性测量。有关文章的更多详细信息作为元数据的一部分返回。
通过API和Frontend Web应用程序,可以通过Pinecone Metadata查询语言以滤波器词典的形式传递所需的最高k数量结果,并且也可以以滤波器字典的形式传递诸如日期和页面计数之类的过滤器。
通过API,元数据滤波器的字典应直接反映可以传递给Pinecone的字典格式,尽管Web应用程序将处理添加键,并且用户可以将值仅以表单为单方。
要与Python和依赖关系建立,以运行此项目:
$ python -m venv <evironment_name>$ <evironment_name>Scriptsactivate.bat$ pip install -r requirements.txt$ python <filename>.py PINECONE_API_KEY='<YOUR API KEY>'
PINECONE_ENV='<YOUR ENVIRONMENT>'
为您的Pinecone索引添加数据:
这应该嵌入并将数据集中的所有项目嵌入到您的松果索引中。请注意,这增加了当前索引,因此,如果仅希望新数据在索引内,则应首先删除索引,该索引可以使用该存储库中DBClclient类的._delete_index()方法完成。
从 /后端文件夹中,API可以由任何一个运行:
$ uvicorn main:app不会在任何开发更改中更新API,但可以在终端中使用CTRL + C轻松关闭API$ uvicorn main:app --reload ,它将通过任何开发更改更新API,但不会使用CTRL + C关闭API有两个端点,一个用于仅进行简单查询搜索,另一个用于查询加上元数据过滤器的搜索。但是,处理过滤器的方式意味着滤波后的端点将与空的dict一起使用,因此是从Web应用程序中调用的唯一端点。
GET /api/v1/query/{query_string}/{top_n}
采用两个路径参数: - query_string(数据类型:字符串) - 应该在语义上与用户想要的结果相似的主要搜索查询 - top_n(数据类型:整数) - 要返回的匹配数量
POST /api/v1/filter-query/{query_string}/{top_n}
采用相同的两个路径参数: - query_string(数据类型:字符串) - 应该与用户想要的结果相似的主要搜索查询 - top_n(数据类型:整数) - 要返回的匹配数
加上请求主体中的过滤器命令,例如:
{
"document_type" : { "$eq" : " document " },
"word_count" : { "$gte" : 2000 }
}两个端点返回相同类型的响应,主要结果是“匹配”键中的数组,例如:
{
"matches" : [
{
"id" : " 123-abc-321 " ,
"score" : 18.792 ,
"values" : [],
"metadata" : {
"categories" : [
" Language & Literature " ,
" Humanities "
],
"creator" : [
" A. Creator "
],
"date_published" : " 2020/04/01 " ,
"document_sub_type" : " " ,
"document_type" : " document " ,
"issue_number" : " 1 " ,
"language" : [
" eng "
],
"page_count" : 10.0 ,
"parent_publication" : " A publication " ,
"publisher" : " A publisher " ,
"sub_title" : " " ,
"title" : " An example " ,
"url" : " http://www.jstor.org/stable/1234 " ,
"volume_number" : " 2123 " ,
"word_count" : 123.0
}
}
],
"namespace" : " "
}设置后端并运行API后,您应该能够使用Web应用程序与API进行交互并更轻松地搜索。为此:
$ npm install以安装依赖项$ npm start在本地启动Web应用程序