最佳关键字搜索技术
best keyword searching technique
我有一个 table 包含一个名为 title 的列。
输入以字符串形式从用户那里获取。该字符串实际上是由space分隔的一组关键字。
我想搜索整个 table 以查找其标题字段包含用户输入的字符串中出现的一些关键字的记录,结果需要按匹配顺序显示。
例如:
RecordA -> title -> "apple mango grapes banana"
RecordB -> title -> "apple lemon orange"
RecordC -> title -> "banana"
RecordD -> title -> "lemon mango grapes"
假设用户输入的字符串是:"apple mango orange"
然后我想要 php 页面的结果
Record A // 2 matches
Record B // 2 matches
Record D // 1 match
Record C // 0 match
建议我在 php..
中执行此操作的有效方法
注意:数据库位于 Mysql。不能修改为 table.
添加全文搜索索引
最好的方法是全文搜索(参见 here)。这种是做你想做的事情的正确方法,也是迄今为止最有效的方法。
在没有全文搜索的情况下你可以做的是这样的:
select t.*
from table t
where title like '%word1%' or
title like '%word2%' or
. . .
order by ((title like '%word1%') +
(title like '%word2%') +
. . .
) desc;
您将必须解析用户提供的单词以获取每个单词。另请注意,您遇到了单词边界问题。如上所述,这将找到字母串的任何出现,即使是在一个单词中。如果这是一个问题,那么使用正则表达式而不是 like
。但是,真正的解决方案是全文搜索。
我有一个 table 包含一个名为 title 的列。
输入以字符串形式从用户那里获取。该字符串实际上是由space分隔的一组关键字。
我想搜索整个 table 以查找其标题字段包含用户输入的字符串中出现的一些关键字的记录,结果需要按匹配顺序显示。
例如:
RecordA -> title -> "apple mango grapes banana"
RecordB -> title -> "apple lemon orange"
RecordC -> title -> "banana"
RecordD -> title -> "lemon mango grapes"
假设用户输入的字符串是:"apple mango orange" 然后我想要 php 页面的结果
Record A // 2 matches
Record B // 2 matches
Record D // 1 match
Record C // 0 match
建议我在 php..
中执行此操作的有效方法注意:数据库位于 Mysql。不能修改为 table.
添加全文搜索索引最好的方法是全文搜索(参见 here)。这种是做你想做的事情的正确方法,也是迄今为止最有效的方法。
在没有全文搜索的情况下你可以做的是这样的:
select t.*
from table t
where title like '%word1%' or
title like '%word2%' or
. . .
order by ((title like '%word1%') +
(title like '%word2%') +
. . .
) desc;
您将必须解析用户提供的单词以获取每个单词。另请注意,您遇到了单词边界问题。如上所述,这将找到字母串的任何出现,即使是在一个单词中。如果这是一个问题,那么使用正则表达式而不是 like
。但是,真正的解决方案是全文搜索。