我拥有一个壁纸网站,我正在尝试编写一个搜索功能,该功能将在数据库中搜索用户正在搜索的术语。我在数据库中有 2 个字段,我正在针对 TAGS 和 NAME 进行搜索
我目前的做法是将搜索词分成多个词,然后使用这些词搜索数据库。因此,如果用户搜索“纽约”,我的查询将如下所示
SELECT * FROM wallpapers
WHERE tags LIKE '%New%' OR name LIKE '%new%'
or tags LIKE '%York%' OR name LIKE '%York%'
Run Code Online (Sandbox Code Playgroud)
当然,问题在于任何带有新术语的东西都会被拉起,比如“新车”等。如果我用下面的代码替换上面的查询,那么它太模糊了,只会显示 2 张壁纸
SELECT * FROM wallpapers
WHERE tags LIKE '%New York%' OR name LIKE '%New York%'
Run Code Online (Sandbox Code Playgroud)
有没有人有更好的方法来编写搜索查询?
看来您要介绍相关性的概念。
尝试:
select * from (
SELECT 1 as relevance, * FROM wallpapers
WHERE tags LIKE '%New York%' OR name LIKE '%New York%'
union
select 10 as relevance, * FROM wallpapers
WHERE (tags LIKE '%New%' OR name LIKE '%new%')
and (tags LIKE '%York%' OR name LIKE '%York%')
union
select 100 as relevance, * FROM wallpapers
WHERE tags LIKE '%New%' OR name LIKE '%new%'
union
select 100 as relevance, * FROM wallpapers
WHERE tags LIKE '%York%' OR name LIKE '%York%'
)
order by relevance asc
Run Code Online (Sandbox Code Playgroud)
顺便说一句,如果您的数据库变得太大,这将非常非常糟糕 - 您希望始终格式化您的列,以便它们全部为大写(或全部小写),并且您希望避免在 where 子句中使用通配符如果可以的话。
一旦这成为一个问题,请查看全文搜索。
| 归档时间: |
|
| 查看次数: |
39685 次 |
| 最近记录: |