当前位置: 首页 > 面试题库 >

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

芮化
2023-03-14
问题内容

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

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。它允许设置运营商的权重并进行排名。



 类似资料:
  • 我按直接顺序列出了列表1<代码>列表 如何更改顺序。我不知道如何重写扩展类中的方法,请用例子写或说清楚。

  • 问题内容: 我现在只需获取数组的前3个对象并映射它们: 每个都有一个属性(champ.level)。 如何将输出分类到 前三个切片中? 问题答案: 与自定义比较功能一起使用时,首先要进行降序排序: 使用ES6甚至更好:

  • 问题内容: 我对MYSQL相对较新,遇到了困扰我一段时间的问题。我已经尝试在所有地方使用Google搜索来寻找答案,但到目前为止仍无法找到可接受的解决方案。 这是我当前正在运行的查询,用于查找给定搜索词的最佳匹配项: 它返回的结果是全面的,因为它们包括所有相关的行。但是,它们没有按照任何特定的顺序排序,我希望在用PHP打印结果时首先显示完全匹配的匹配项。像这样: 1 | 字<精确匹配 2 | 填字

  • 问题内容: 我试图按表中的列对表中的产品进行排序: 我在商店\产品模型中设置关系: 但是产品没有分类。我得到一个仅适用于表的查询。 如何解决? 问题答案: 急切的加载使用单独的查询,因此您需要为此加入: 子句是为了不将联接的列追加到模型中。 编辑:根据@alexw注释-如果需要,您仍然可以包括联接表中的列。您可以将它们添加到或致电等。

  • 问题内容: 我有一个清单清单: 如果要按一个元素(例如,高/短元素)排序,可以通过进行。 如果我想作为排序依据两个高大和颜色,我可以为每个元素做排序两次,一次,但有一个更快的方法? 问题答案: 键可以是返回元组的函数: 或者,你可以使用来实现相同的效果(速度更快,并且避免了Python函数调用): 并请注意,你可以在此处使用而不是使用,然后重新分配:

  • 我用的是拉威尔的背包,积垢舱。 如何将orderby()用于多列? 例子: 我看到src和orderby只接受一个参数。 有什么建议吗?