MySQL match() against() - 按相关性和列排序?

标签 mysql full-text-search

好的,所以我正在尝试在多个列中进行全文搜索,就像这样简单:

SELECT * FROM pages WHERE MATCH(head, body) AGAINST('some words' IN BOOLEAN MODE)

现在我想按相关性排序,(找到多少个单词?)我已经能够用这样的东西来做:

SELECT * , MATCH (head, body) AGAINST ('some words' IN BOOLEAN MODE) AS relevance 
FROM pages
WHERE MATCH (head, body) AGAINST ('some words' IN BOOLEAN MODE)
ORDER BY relevance

现在我迷路的部分来了,我想在 head 列中优先考虑相关性。

我想我可以创建两个相关性列,一个用于 head,一个用于 body,但那时我会在表格中进行一些相同的搜索三次,对于我正在制作这个函数的内容,性能很重要,因为查询将被连接并与其他表匹配。

那么,我的主要问题是,是否有更快的方法来搜索相关性并确定某些列的优先级? (作为奖励,甚至可能使相关性计数单词在列中出现的次数?)

任何建议或意见都会很棒。

注意:我将在 LAMP 服务器上运行它。 (本地测试中的 WAMP)

最佳答案

可能会增加与您想要的头部的相关性。它不会翻倍,但对你来说可能就足够了:

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

-- alternatively:
ORDER BY title_relevance + relevance DESC

如果您可以灵活地切换数据库引擎,您还想研究的另一种方法是 Postgres .它允许设置运营商的权重并调整排名。

关于MySQL match() against() - 按相关性和列排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6259647/

相关文章:

.net - 我如何从 .Net 文化中获取 Sql 语言名称

php - PDO 和 MySQL 全文搜索

c# - Entity Framework 和MySql更新实体

sql - 如何优化这个 SQL 查询?

mysql 连接数与正在运行的查询相比过高

php - mongodb 中的文本搜索 - php

sql-server - 在 linked in 或 fb 中搜索如何运作?

sql-server - 全文搜索排名(SQL Server)

mysql - 根据给定数组的顺序对选定的键进行排序

php - 如何启用 php 扩展和数据库支持?