按相关性排序的 MySQL 搜索结果
问题:
优化 MySQL 中的搜索查询对搜索字符串更接近单词开头的结果进行优先级排序,从而产生更加用户友好的“最佳结果”
讨论:
初始查询,SELECT word FROM Words WHERE word LIKE '%searchstring%' ORDER BY word ASC,按字母顺序对结果进行排序,不带任何字符搜索字符串在单词中的位置的偏好。为了解决这个问题,我们可以使用 MySQL 的 CASE 语句作为第一种排序方法,使用 LOCATE 函数作为第二种排序方法。
解决方案:
第一种排序方法(开始、中间、结束word):
SELECT word FROM words WHERE word LIKE '%searchstring%' ORDER BY CASE WHEN word LIKE 'searchstring%' THEN 1 -- Starts with search string WHEN word LIKE '%searchstring' THEN 3 -- Includes search string ELSE 2 -- Does not include search string END
第二种排序方法(匹配字符串的位置):
SELECT word FROM words WHERE word LIKE '%searchstring%' ORDER BY LOCATE('searchstring', word)
Tie-breaker(可选):
在多个单词共享一个位置的情况下进一步细化排序单词,可以使用单词本身添加辅助排序字段:
SELECT word FROM words WHERE word LIKE '%searchstring%' ORDER BY LOCATE('searchstring', word), word
结论:
通过采用这些技术,可以按相关性对搜索结果进行排序,优先匹配看起来更接近单词开头的匹配。这提供了更直观的用户体验并提高了搜索功能的准确性。
以上是如何优化 MySQL 搜索以优先考虑搜索词出现在 Word 中较早的结果?的详细内容。更多信息请关注PHP中文网其他相关文章!