按 sphinx 中的过滤字段和文本匹配排名排序

发布于 2024-12-21 08:54:54 字数 683 浏览 0 评论 0原文

现在我正在使用 Sphinx 对数据库中的某些实体进行文本搜索。为了简单起见,我们假设这些实体是具有名称、描述和角色字段的客户端。

我对权重为 200 的名称和权重为 50 的描述进行文本搜索,以匹配这些字段。一切都按预期进行。问题是现在我需要按角色排序,始终将角色 1 放在第一位。

在普通查询中,我会执行类似

... ORDER BY c.role DESC, c.sphinx_ranking DESC

仅使用sphinx 可以吗?我知道可以通过过滤器进行排序,但我不知道是否可以同时使用文本权重顺序和字段角色。

已解决: 我通过阅读 Sphinx 文档找到了答案。如果有人遇到同样的问题,这里是解决方案:

要混合使用 sphinx 的权重和用作过滤器的字段,您必须使用 SPH_SORT_EXTENDED 作为排序模式,并像在 SQL 语句中一样传递字段作为参数。

就我而言,我使用的是 php,因此代码如下:

$sphinxclient->SetSortMode(SPH_SORT_EXTENDED,"role DESC,@weight DESC"); 

其中 @weight 是 Sphinx 排名值,角色是我表上的一个字段。这样我首先得到角色为 1 的客户端,然后按 sphinx 文本评级对结果进行排序。非常简单!

Right now I'm using Sphinx to make text search over some entities in my database. For simplicity lets asume that these entities are Clients with a name, description and a role field.

I do text search over name with weight 200 and over the description with weight 50 on matches on those fields. Everything works as expected. The problem is that right now I need to order by role, leaving role 1 always first.

On a normal query I would do something like

... ORDER BY c.role DESC, c.sphinx_ranking DESC

Is this possible using only sphinx? I know that is posible to sort by a filter but i don't know if is possible to use both, the text weight order AND the field role.

Solved:
I found the answer reading Sphinx documentation. If someone has the same problem here is the solution:

To mix both, the weight from sphinx and a field that works as a filter you must use SPH_SORT_EXTENDED as Sort Mode and as parameter you pass the fields like in a SQL statement.

On my case, I'm using php so the code is this:

$sphinxclient->SetSortMode(SPH_SORT_EXTENDED,"role DESC,@weight DESC"); 

Where @weight is the Sphinx Ranking value and role is a field on my table. With this I get the clients whose role is 1 first and then the result is sorted by sphinx text rating. Very Simple!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文