MySQL 全文搜索:增强相关性和列优先级
在数据库中的多个列中搜索特定术语是一项常见任务。 MySQL 提供了 MATCH() 和 AGAINST() 函数来执行全文搜索,允许用户指定搜索词和搜索模式。
但是,在处理多列并优先考虑搜索相关性时,会出现额外的考虑因素。要按相关性对结果进行排序,可以使用像 SELECT * FROM Pages WHERE MATCH(head, body) AGAINST('some Words' IN BOOLEAN MODE) 这样的简单查询。
根据特定列对相关性进行优先级排序,例如作为头列,需要一种替代方法。通过创建附加列来存储标题列的相关性分数,用户可以在对结果进行排序和优先级排序方面获得更大的灵活性。然而,由于在同一个表上进行了额外的搜索操作,这种方法会产生性能影响。
另一种解决方案是利用附加的相关性列,并将其与一般全文搜索的相关性得分相结合。这可以使用如下查询来实现:
SELECT pages.*, MATCH (head, body) AGAINST ('some words') AS relevance, MATCH (head) AGAINST ('some words') AS title_relevance FROM pages WHERE MATCH (head, body) AGAINST ('some words') ORDER BY title_relevance DESC, relevance DESC
此查询为搜索词出现在标题列中的结果分配更高的相关性,同时保持整体搜索相关性。
此外,使用PostgreSQL 等数据库引擎提供可配置的运算符权重和排名机制,可以为相关性优先级和评分提供更高级的选项。
以上是如何在 MySQL 全文搜索中确定跨多个列的搜索相关性的优先级?的详细内容。更多信息请关注PHP中文网其他相关文章!