Mysql 与替代方案匹配

发布于 2024-08-06 17:02:09 字数 94 浏览 4 评论 0原文

我需要使用相关性算法进行搜索,数据库是mysql。我必须按日期对结果进行排序,关键字是否在标题中,关键字在文本中出现的次数等等。

比赛并没有给我太多的控制权。

I need a search with a relevance algorithm and the database is mysql. I have to sort the results by date, if keyword is in title or not, number of apparitions of the keyword in the text and so on.

Match against doesn't give me that much control.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

独留℉清风醉 2024-08-13 17:02:09

像这样的东西会做你想要的:

select
  * 
from
  myTable
order by
  sum
  (
    itemdate='2009-10-09',
    title like '%keyword%',
    text like '%keyword%', 
    criteria4,
    criteria5
  )
  • 每个条件如果为假则返回 0,如果为真则返回 1。
  • 您将每一项相加并按结果排序。
  • 具有最多匹配条件的行将位于顶部。

当然,您可以通过每个条件不仅仅是 0 或 1 来微调所有这些。

Something like this would do what you want:

select
  * 
from
  myTable
order by
  sum
  (
    itemdate='2009-10-09',
    title like '%keyword%',
    text like '%keyword%', 
    criteria4,
    criteria5
  )
  • Each criteria returns 0 if false, and 1 if true.
  • You sum each of those and order by the result.
  • Rows that have the most matching criteria will be on top.

You can finetune all this of course by not just having 0 or 1 per criteria.

孤者何惧 2024-08-13 17:02:09
select
  * 
from
  myTable
order by
(
    (itemdate='2009-10-09') +
    (title like '%keyword%') +
    (text like '%keyword%') +
    (criteria4) +
    (criteria5)
)

这真的很棒。

select
  * 
from
  myTable
order by
(
    (itemdate='2009-10-09') +
    (title like '%keyword%') +
    (text like '%keyword%') +
    (criteria4) +
    (criteria5)
)

This works really great.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文