【问题标题】:Multiple word search results in MySQLMySQL中的多个单词搜索结果
【发布时间】:2016-03-28 05:56:37
【问题描述】:

我想知道是否可以在 MySQL 中对结果进行索引。例如,我有一个要使用的搜索词,它可以是一个词或多个词。例如。 “房子”或“公海房子”。现在我想知道 MySQL 是否可以索引那个“高海房子”在一个查询中适合 3 次,而“房子”只适合一次。

我在想这样的事情:

select `fields` from `table` where
  `searchfield` like 'high' or
  `searchfield` like 'sea' or
  `searchfield` like 'house' or

等等 - 取决于我在搜索过程中使用了多少。

现在我需要对搜索过程进行如下排序:

  1. 我需要包含从搜索词到索引的所有单词的记录
  2. 我需要针对我的搜索词的每个词评估有多少词适合我的搜索。

有什么想法吗?

非常感谢!

【问题讨论】:

标签: mysql search


【解决方案1】:

您可以使用以下查询:

SELECT `fields` FROM `table`, (`searchfield` LIKE '%high%') +
(`searchfield` LIKE '%sea%') + (`searchfield` LIKE '%house%')  AS hits
WHERE `searchfield` LIKE '%high%' OR
`searchfield` LIKE '%sea%' OR
`searchfield` LIKE '%house%'
ORDER BY hits DESC

或者简单地说:

SELECT `fields` FROM `table`, (`searchfield` LIKE '%high%') +
(`searchfield` LIKE '%sea%') + (`searchfield` LIKE '%house%')  AS hits
HAVING hits > 0
ORDER BY hits DESC

它可以作为布尔评估返回 1 或 0。因此,例如highseasearchfield 的一部分,hits 将是 1 + 1 + 0 = 2。然后这些行按降序排列,因此您将获得首先点击次数最多的行。

现在我不知道你在searchfield 中存储了什么,但如果它包含由空格分隔的单词,你也可以用空格包围搜索词(例如'% sea %'),这样你就不会得到匹配在海马上。如果searchfield 中的第一个词和最后一个词前后都没有空格,那会给您带来问题。

【讨论】:

    猜你喜欢
    • 2018-12-10
    • 2011-02-14
    • 2015-07-13
    • 2011-10-06
    • 1970-01-01
    • 2023-03-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多