MySQL中有多个单词搜索结果

时间:2016-03-28 05:56:37

标签: mysql search

我想知道是否可以在MySQL中对结果进行索引。例如,我有一个可以使用的搜索词,可以是一个词或多个词。例如。 "房子"或者"高海上住宅"。现在我想知道MySQL是否可以索引那个"高海洋房屋"在查询中适合3次,而不是" house"只适合一次。

我想到这样的事情:

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

依此类推 - 取决于我在搜索过程中使用了多少个。

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

  1. 我需要包含搜索字词到第一个索引的所有字词的记录
  2. 我需要评估搜索词中每个单词的搜索量。
  3. 有什么想法吗?

    Thanx很多!

1 个答案:

答案 0 :(得分:0)

您可以使用以下查询:

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。 sea searchfield hits的一部分,将是1 + 1 + 0 = 2.然后按行降序排序,以便您和#39;首先获得点击次数最多的行。

现在我不知道你在searchfield中存储了什么,但是如果它包含用空格分隔的单词,你也可以用空格包围搜索单词(例如'% sea %')所以你赢得 seahorse 的比赛。如果他们之前和之后都没有空格,那么searchfield中的第一个和最后一个单词就会出现问题。