这是我想要做的:
例如:我们假设我有一个博客.然后有人搜索"php".结果会这样:
我实际上用PHP中的一个类做了这个,但它使用了很多UNIONS(很多!)并且随着搜索主题的大小而增长.所以我担心性能和DOS问题.有没有人对此有所了解?
hak*_*kre 36
这种加权搜索/结果的方法可能适合您:
SELECT *,
IF(
`name` LIKE "searchterm%", 20,
IF(`name` LIKE "%searchterm%", 10, 0)
)
+ IF(`description` LIKE "%searchterm%", 5, 0)
+ IF(`url` LIKE "%searchterm%", 1, 0)
AS `weight`
FROM `myTable`
WHERE (
`name` LIKE "%searchterm%"
OR `description` LIKE "%searchterm%"
OR `url` LIKE "%searchterm%"
)
ORDER BY `weight` DESC
LIMIT 20
Run Code Online (Sandbox Code Playgroud)
它使用select子查询来提供排序结果的权重.在这种情况下,搜索了三个字段,您可以指定每个字段的权重.它可能比工会便宜,而且可能只是普通MySQL中更快的方法之一.
如果你有更多的数据并且需要更快的结果,你可以考虑使用像Sphinx或Lucene这样的东西.
你可以将多个mysql MATCH()值一起添加,首先将每个值乘以它们的权重.
简化当然......
'(MATCH(column1) AGAINST(\''.$_GET['search_string'].'\') * '.$column1_weight.')
+ (MATCH(column2) AGAINST(\''.$_GET['search_string'].'\') * '.$column2_weight.')
+ (MATCH(column3) AGAINST(\''.$_GET['search_string'].'\') * '.$column3_weight.')
AS relevance'
Run Code Online (Sandbox Code Playgroud)
然后
'ORDER BY relevance'
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
8905 次 |
最近记录: |