posix(~*)搜索结果排序

tyg4sfes  于 2021-07-24  发布在  Java
关注(0)|答案(1)|浏览(291)

我有一个查询,它根据搜索词给出一个结果。
我正在使用postgre的posix搜索(~*):https://www.postgresql.org/docs/8.3/functions-matching.html#functions-posix正则表达式
例如,如果我搜索“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",
        }
      ]
}

因此,第一个结果以姓氏出现:ojeda
第二个结果以爱德华多的名字出现了
第三个结果出现在姓paedes中
这是我的(简化)查询:

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

我认为eduardo是我搜索的最准确的结果,因为我是按照“ed”的顺序搜索的(可能是开头有ed的姓),所以我想把eduardo作为我的第一个结果,有什么方法可以做到这一点吗?
我知道我可以使用like%:searchterm,但我想在整个字符串中搜索,但会以预定义的顺序得到结果。
谢谢您!

t2a7ltrp

t2a7ltrp1#

添加 ORDER BY 条款:

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

这依赖于 FALSE < TRUE .

相关问题