首页 > 解决方案 > 使用 Postgre 进行 POSIX (~*) 搜索。结果顺序

问题描述

我有一个查询,它给我一个基于搜索词的结果。

我正在使用来自 postgre (~*) 的 POSIX 搜索:https ://www.postgresql.org/docs/8.3/functions-matching.html#FUNCTIONS-POSIX-REGEXP

例如,如果我搜索“ ed

结果将是这样的:

{
    "success": true,
    "data": [
        {
            "name": "Victoria",
            "last_name": "Ojeda Acu–a",
        },
        {
            "name": "Eduardo Daniel",
            "last_name": "Ordo–ez",
        },
        {
            "name": "Ludmila Daiana",
            "last_name": "Paredes Sosa",
        }
      ]
}

这是我的(简化)查询:

SELECT u.name, u.last_name FROM user u WHERE u.name ~* :searchTerm OR u.last_name ~* :searchTerm

我认为Ed uardo 是我的搜索中最准确的结果,因为我按“ED”的顺序搜索(也可能是开头带有 ED 的姓氏),所以我想得到 Eduardo,因为我的第一个结果有实现这一目标的方法?

我知道我可以使用 LIKE %:searchTerm 但我想在整个字符串中搜索,但以某种预定义的顺序获取结果。

谢谢你!

标签: sqlpostgresqlsearchsql-order-byposix

解决方案


添加一个ORDER BY子句:

ORDER BY starts_with(u.name, :searchTerm) DESC

这依赖于FALSE < TRUE.


推荐阅读