目标:增强 MySQL 搜索以返回按与给定搜索词的相似度排名的结果。
挑战:构建一个能够有效识别相似字符串并按相关性对结果进行排序的搜索引擎。
解决方案:
1。外部搜索引擎:
考虑提供高级功能的外部搜索引擎:
2。 MySQL 全文索引:
使用MySQL内置的全文索引进行高效的字符串匹配。创建临时 MYISAM 表(以启用全文搜索):
<code class="language-sql">ALTER TABLE data_table_temp ADD FULLTEXT FTK_title_description (title, description);</code>
3。优化查询:
全文搜索:
使用带有布尔模式的 MATCH AGAINST
运算符进行基于相似性的搜索:
<code class="language-sql">SELECT *, MATCH (title, description) AGAINST ('+so* +nullam lorem') AS score FROM data_table_temp WHERE MATCH (title, description) AGAINST ('+so* +nullam lorem') ORDER BY score DESC;</code>
编辑距离和 LIKE
:
虽然 Levenshtein 距离对于部分匹配并不理想,并且 LIKE
可能会错过较长的字符串,但它们可能适合特定情况。
进一步考虑:
Lucene 索引维护:
为 Lucene 索引安排定期更新(例如,使用 cron 作业),因为它们不是实时的。
搜索分析器配置:
选择合适的分析器来微调搜索行为(区分大小写、语言支持、停用词删除)。
限制:
最佳解决方案取决于您的具体需求。在做出决定之前仔细权衡每种方法的优点和缺点。
以上是如何增强 MySQL 搜索功能以返回相似性排序的结果?的详细内容。更多信息请关注PHP中文网其他相关文章!