按 sphinx 中的过滤字段和文本匹配排名排序
现在我正在使用 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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论