quepid

quepid

协作式搜索结果优化平台

Quepid是一个开源的搜索结果优化平台,通过可重复的工程流程帮助团队提升搜索质量。它解决了搜索优化中的协作、测试和迭代问题,提供直观界面用于评估和改进搜索结果,将搜索优化转化为可控的工程过程。Quepid支持跨职能团队协作,简化搜索测试,加快迭代速度,是一个全面的搜索优化解决方案。

Quepid搜索优化开源项目Docker测试Github

Quepid

许可证 CircleCI Docker Hub Rails 风格指南 Slack

<img src="https://yellow-cdn.veclightyear.com/0a4dffa0/9865845c-7dad-4427-9904-edb57a22eb1e.png" alt="Quepid 标志" title="Quepid" align="right" />

Quepid 使改进应用程序的搜索结果成为一个可重复、可靠的工程过程,整个团队都能理解。它解决了三个问题:

  1. 我们的协作糟糕 要在搜索方面取得全面进展,需要深入的跨职能协作。通过电子邮件或在电子表格中跟踪搜索需求是不够的。

  2. 搜索测试很困难 搜索变更是全面的:大多数变更都会引发问题。测试很困难:你不能在每次相关性变更后运行数百次搜索。

  3. 迭代速度慢 前进似乎是不可能的。为了避免倒退,进展缓慢。许多人干脆放弃搜索,剥夺了用户查找关键信息的手段。

要了解更多信息,请查看 Quepid 网站Quepid wiki

如果你准备立即开始使用,可以现在就使用 Hosted Quepid 服务,或者按照安装步骤设置你自己的 Quepid 实例。

目录

以下是与开发 Quepid 开源项目相关的信息,主要面向那些对扩展 Quepid 功能感兴趣的人!

<!-- MarkdownTOC levels="1,2,3,4" autolink=true bracket=round --> <!-- /MarkdownTOC -->

开发设置

I. 系统依赖

使用 Docker Compose

从已构建的机器配置大约需要 3-4 分钟。从头开始配置大约需要 20 分钟。

1. 前提条件

确保你已安装 Docker。前往 https://www.docker.com/community-edition#/download 获取安装说明。并启动 Docker 应用程序。

要使用 brew 安装,请按以下步骤操作:

brew cask install docker
brew cask install docker-toolbox

注意: 第一次尝试时,你可能会收到有关信任 Oracle 的警告。打开系统偏好设置 > 安全性和隐私,点击允许 Oracle 按钮,然后再次尝试安装 docker-toolbox。

2. 设置环境

运行本地 Ruby 设置脚本来设置 Docker 镜像:

bin/setup_docker

如果你想创建包含数百或数千个查询的案例,请执行以下操作:

 bin/docker r bundle exec thor sample_data:large_data

这对于对 Quepid 进行压力测试很有用!特别是对前端应用程序!

最后,要运行 Jupyter notebooks,你需要运行:

bin/setup_jupyterlite

3. 运行应用

现在在 http://localhost 本地启动 Quepid:

bin/docker server

服务器可能需要长达一分钟的时间才能响应,因为它在第一次调用时会编译所有前端资产。 我们创建了一个辅助脚本来通过 Docker 运行和管理应用程序,该脚本封装了 docker-compose 命令。你需要安装 Ruby。 你仍然可以直接使用 docker-compose,但对于基本操作,你可以使用以下命令:

  • 启动应用:bin/docker serverbin/docker s
  • 使用 bash 连接到应用容器:bin/docker bashbin/docker ba
  • 连接到 Rails 控制台:bin/docker consolebin/docker c
  • 运行任意命令:bin/docker run [命令]bin/docker r [命令]
  • 以守护进程模式运行开发模式:bin/docker daemonbin/docker q
  • 销毁 Docker 环境:bin/docker destroybin/docker d
  • 运行前端单元测试:bin/docker r rails test:frontend
  • 运行后端单元测试:bin/docker r rails test

II. 开发日志

在 foreman 下运行应用时,你只能看到请求日志。要查看更详细的日志,请运行以下命令:

tail -f log/development.log

III. 运行测试

你可以运行三种类型的测试:

Minitest

这些测试运行 Rails 端的测试(主要是 API 控制器和模型):

bin/docker r rails test

运行单个测试文件:

bin/docker r rails test test/models/user_test.rb

甚至可以通过传入行号来运行测试文件中的单个测试!

bin/docker r rails test test/models/user_test.rb:33

如果需要重置测试数据库设置,请运行:

bin/docker r bin/rake db:drop RAILS_ENV=test
bin/docker r bin/rake db:create RAILS_ENV=test

要查看测试过程中生成的日志,请在 test.rb 中设置 config.log_level = :debug, 然后通过以下命令查看日志文件:

tail -f log/test.log

JS 语法检查

检查 JS 语法:

bin/docker r rails test:jshint

Karma

运行 Angular 端的测试。Karma 测试有两种模式:

  • 单次运行:bin/docker r rails karma:run
  • 持续/监视运行:bin/docker r bin/rake karma:start

注意: Karma 测试需要预编译资源,这会显著增加测试运行时间。如果你只修改了测试/规格文件,建议在监视模式下运行测试(bin/docker r bin/rake karma:start)。需要注意的是,每当你修改应用文件时,都需要重启进程(或使用单次运行模式)。

Rubocop

检查 Ruby 语法:

bin/docker r bundle exec rubocop

Rubocop 通常可以通过 --autocorrect-all 自动修正许多语法问题:

bin/docker r bundle exec rubocop --autocorrect-all

如果有新的我们不喜欢的"Cop"(他们称之为规则),你可以将其添加到 ./rubocop.yml 文件中。

所有测试

如果你想一次运行所有测试(例如在提交和推送之前),只需运行以下两个命令:

bin/docker r rails test
bin/docker r rails test:frontend

由于某些原因,我们无法用一个命令运行两者,尽管我们应该能做到!

性能测试

如果你想为用户创建大量查询进行测试,请运行

bin/docker r bin/rake db:seed:large_cases

你将有两个用户,quepid+100sOfQueries@o19s.comquepid+1000sOfQueries@o19s.com 可供测试。

Notebook 测试

如果你想测试 Jupyterlite notebooks,或使用"真实"的案例和书籍,请运行

bin/docker r bundle exec thor sample_data:haystack_party

你将有大量来自 Haystack 评分派对书籍和案例的用户数据可供使用。这些数据来源于公共案例 https://app.quepid.com/case/6789/try/12?sort=defaulthttps://app.quepid.com/books/25

IV. 调试

调试 Ruby

调试 Ruby 通常取决于具体情况,最简单的方法是将对象打印到 STDOUT:

puts object # 打印对象的 .to_s 方法 puts object.inspect # 检查对象并打印(包括属性) pp object # 美化打印检查后的对象(类似 .inspect 但更好)

在 Rails 应用中,你可以使用日志记录器进行输出:

Rails.logger object.inspect

如果这还不够,你想运行调试器,可以使用包含的 debug gem。 参见 https://guides.rubyonrails.org/debugging_rails_applications.html#debugging-with-the-debug-gem。

此外,我们还有 derailed gem 可用,它可以帮助你了解内存问题。

bin/docker r bundle exec derailed bundle:mem

调试 JS

在运行应用程序时,你可以使用你喜欢的工具以你一贯的方式调试 JavaScript。

JavaScript 文件将使用 Rails 资产管道合并成一个文件。

你可以通过在 config/environments/development.rb 中切换以下标志来关闭它:

# config.assets.debug = true config.assets.debug = false

改为:

config.assets.debug = true # config.assets.debug = false

由于此应用程序中有太多 Angular JS 文件,在 debug 模式下 Rails 会尝试单独加载每个文件,这会减慢应用程序速度,并在开发模式下等待脚本加载变得非常烦人。这就是为什么默认情况下它被关闭。

注意: 更改配置时不要忘记重启服务器。

另请注意,secure.jsapplication.jsadmin.js 文件用于通过 Rails 资产管道加载所有 JavaScript 和 CSS 依赖项。如果你正在调试 Bootstrap,那么你需要单独的文件。因此,将 //= require sprockets 替换为 //= require bootstrap-sprockets

Webpacker

要使用 webpacker(它会将 JavaScript 代码编译成包并更快地加载更改),你需要

bin/rails webpacker:install

在此之前我必须安装:

brew install mysql

调试 Splainer 和其他 NPM 包

可以将 docker-compose.override.yml.example 复制为 docker-compose.override.yml,并用它来覆盖环境变量或在开发期间使用 docker-compose.yml 中定义的 splainer-search JS 库的本地副本。示例已包含在内。只需用你的本地检出更新 splainer-search 的路径即可!https://docs.docker.com/compose/extends/

便利脚本

这个应用程序有两种运行脚本的方式: rakethor

Rake 非常适合依赖于应用程序环境的简单任务,以及 Rails 默认附带的默认任务。

而 Thor 是一个更强大的工具,用于编写比 Rake 更优雅地接受参数的脚本。

Rake

要查看可用的 rake 任务,请运行:

bin/docker r bin/rake -T

注意: 使用 bin/rake 确保运行的 rake 版本是与应用程序的 Gemfile.lock 锁定的版本(以避免与系统上可能安装的其他版本发生冲突)。这等同于 bundle exec rake

你可能会使用的常见 rake 任务:

# 数据库
bin/docker r bin/rake db:create
bin/docker r bin/rake db:drop
bin/docker r bin/rake db:migrate
bin/docker r bin/rake db:rollback
bin/docker r bin/rake db:schema:load
bin/docker r bin/rake db:seed
bin/docker r bin/rake db:setup

# 显示路由
bin/docker r bin/rails routes

# 测试
bin/docker r rails test
bin/docker r rails test:frontend
bin/docker r bin/rake test:jshint

Thor

要查看可用的任务:

bin/docker r bundle exec thor list

更多文档请参见 Operating Documentation

Elasticsearch

你需要配置 Elasticsearch 以接受来自浏览器的请求,使用 CORS。要启用 CORS,请将以下内容添加到 elasticsearch 的配置文件中。通常,这个文件位于 elasticsearch 可执行文件附近的 config/elasticsearch.yml

http.cors: enabled: true allow-origin: /https?:\/\/localhost(:[0-9]+)?/

更多详情请参见 wiki: https://github.com/o19s/quepid/wiki/Troubleshooting-Elasticsearch-and-Quepid

开发杂项

我想使用一个新的 Node 模块,或更新现有的模块

通常你只需执行:

bin/docker r yarn add foobar

bin/docker r yarn upgrade foobar

这将安装/升级 Node 模块,然后将该依赖保存到 package.json

然后提交更新后的 package.jsonyarn.lock 文件。

使用 bin/docker r yarn outdated 查看可以更新的包!

我想使用一个新的 Ruby Gem,或更新现有的 Gem

通常你只需执行:

bin/docker r bundle add foobar

这将安装新的 Gem,然后将该依赖保存到 Gemfile

你也可以通过以下方式升级 Gemfile 中没有指定版本的 gem:

bin/docker r bundle update foobar

你可以通过以下方式移除 gem:

bin/docker r bundle remove foobar

然后提交更新后的 GemfileGemfile.lock 文件。为了保险起见, 运行 bin/setup_docker

要了解你是否有过期的 gem,运行:

bin/docker r bundle outdated --groups

如何测试在域名下嵌套 Quepid

docker-compose.yml 中取消注释设置 - RAILS_RELATIVE_URL_ROOT=/quepid-app,然后打开 http://localhost:3000/quepid-app。

我想运行和测试本地 PRODUCTION 构建

以下步骤应该能让你在本地运行 Quepid 的生产构建(而不是开发构建)。

  • 对代码进行所需的更改
  • 从项目根目录运行以下命令来构建新的 docker 镜像:
docker build -t o19s/quepid -f Dockerfile.prod .

首次运行可能会出错。如果发生这种情况,请重试

  • 为你的镜像标记一个新版本。
  • 你可以硬编码你的版本或使用系统变量(如 QUEPID_VERSION=10.0.0),或者如果你喜欢,使用 'latest'
docker tag o19s/quepid o19s/quepid:$QUEPID_VERSION
  • 启动 mysql 容器
docker-compose up -d mysql
  • 运行初始化脚本。这可能需要几秒钟
docker-compose run --rm app bin/rake db:setup
  • 通过更新 app 的镜像版本来更新你的 docker-compose.prod.yml 文件 image: o19s/quepid:10.0.0

  • 以守护进程(-d)或活动容器的方式启动应用

docker-compose up [-d]

我想测试 SSL

.ssl 目录包含用于 SSL 的密钥和证书文件。这是一个仅用于开发的自签名生成的证书!

密钥/证书是使用以下命令生成的:

openssl req -new -newkey rsa:2048 -sha1 -days 365 -nodes -x509 -keyout .ssl/localhost.key -out .ssl/localhost.crt

注意: 不需要再次执行此操作。

docker-compose.yml 文件包含一个使用这些证书的 nginx 反向代理。你可以通过 https://localhosthttp://localhost 访问 Quepid。(Quepid 仍然可以通过 80 端口的 http 访问。)

我想测试 OpenID 认证

在这里添加开发文档!

开发部署的 Keycloak 管理控制台凭据是 adminpassword

修改数据库

以下是生成迁移的示例:

bin/docker r bundle exec bin/rails g migration FixCuratorVariablesTriesForeignKeyName

接着运行 bin/docker r bundle exec rake db:migrate

当你更改了数据库模式时,还应该通过运行 bin/docker r bundle exec annotations 来更新模式注释数据。

更新 RubyGems

修改 Gemfile 文件,然后运行:

bin/docker r bundle install

你会看到更新后的 Gemfile.lock,继续检查它和 Gemfile 并提交到 Git。

前端是如何工作的?

我们在前端使用 Angular 1,作为其中的一部分,我们使用 angular-ui-bootstrap 包来实现所有的 UI 组件。这个包与 Bootstrap 3 版本绑定。我们通过 bootstrap.css 文件直接导入 Bootstrap 3 CSS。

对于各种管理页面,我们实际上使用的是 Bootstrap 5!它是通过 package.json 使用 NPM 引入的。参见 admin.js 中的 //= require bootstrap/dist/js/bootstrap.bundle 行,这里是我们引入它的地方。

我们目前使用 Rails Sprockets 来编译所有内容,但也有计划将 JavaScript 迁移到 Webpacker。

字体

aller 字体来自 FontSquirrel,并将 .ttf 转换为 .woff2 格式。

我想开发 Jupyterlite

运行 ./bin/setup_jupyterlite 来更新 ./jupyterlite/notebooks.gz 存档文件。这也会在 ./public/notebooks 目录中设置静态文件。但是,为了不在 Github 中检入数百个文件,我们忽略了该目录。在 asset:precompile 时,我们会解压 ./jupyterlite/notebooks.gz 文件。这在 Heroku 和生产 Docker 镜像中都可以正常工作。

要更新 Jupyterlite 的版本,请编辑 Dockerfile.devDockerfile.prod 并更新 pip install 的版本。

问题?Jupyterlite 在本地主机上可以工作吗????

个人访问令牌是如何工作的?

参见这篇很棒的博客文章:https://keygen.sh/blog/how-to-implement-api-key-authentication-in-rails-without-devise/。

质量保证

有一个代码部署流程到 http://quepid-staging.herokuapp.com 网站,在成功提交到 main 分支后运行。

如果你有待处理的迁移,你需要通过以下方式运行它们:

heroku run bin/rake db:migrate -a quepid-staging
heroku restart -a quepid-staging

种子数据

以下账户是通过 bin/setup_docker 过程创建的。它们都遵循以下格式:

email: quepid+[类型]@o19s.com
password: password

其中类型是以下之一:

  • admin: 管理员账户
  • realisticActivity: 一个拥有各种案例的用户,展示了 Quepid,包括 Haystack Rating Party 演示案例和书籍,并且是 'OSC' 团队的成员。
  • 100sOfQueries: 一个拥有数百个查询的 Solr 案例的用户(通常被禁用)
  • 1000sOfQueries: 一个拥有数千个查询的 Solr 案例的用户(通常被禁用)
  • oscOwner: 拥有 'OSC' 团队的用户
  • oscMember: 'OSC' 团队成员的用户

数据映射

查看 数据映射 文件以获取有关应用程序数据结构的更多信息。

通过 bin/docker r bundle exec rake erd:image 重建 ERD

应用结构

查看 应用结构 文件以获取有关 Quepid 结构的更多信息。

运营文档

查看 运营文档 文件,了解如何为你的公司运营和配置 Quepid 的更多信息。

🙏 感谢

没有许多个人和组织的贡献,Quepid 是不可能实现的。

特别要感谢 Erik Bugge 和 Kobler 公司的人员,他们资助了在 Quepid 6.4.0 中发布的 Only Rated 功能。

Quepid 并不总是开源的!查看 致谢 了解项目贡献者列表。

如果你想为 Quepid 的新功能开发提供资金,请联系我们!

🌟 贡献者

quepid 贡献者

编辑推荐精选

蛙蛙写作

蛙蛙写作

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 + 文稿类型生成,助力快速完成领导讲话、工作总结、述职报告等材料,提升办公效率,是体制打工人的得力写作神器。

下拉加载更多