2016-03-28 134 views
0

我想知道是否可以在MySQL中对结果进行索引。例如,我有一个搜索词,可以使用一个词或多个词。例如。 “房子”或“高海洋之家”。现在我想知道MySQL是否可以在查询中将这个“高海洋房屋”索引为3次,而不是只适合一次的“房子”。根据我在搜索过程中有多少人使用 -MySQL中的多个词搜索结果

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

等:

我在想这样的事情。

现在我需要排序的搜索过程如下:

  1. 我需要的是包含所有从搜索项的话来索引第一
  2. 记录我需要多少字适应的评估我搜索我搜索词的每个词。

任何想法?

非常感谢!

+2

你想要全文搜索:http://dev.mysql.com/doc/refman/5.7/en/fulltext-search.html – 2016-03-28 05:59:00

+0

你可以通过全文搜索来实现它index..but全文索引只支持myisam引擎直到5.5版本和avaibale innodb引擎也从MySQL 5.6版本...所以请检查由@Dagon提供的文档,如果您使用的是5.6或更高版本或myisam引擎..... –

+0

http:// use- the-index-luke.com/sql/where-clause/searching-for-ranges/like-performance-tuning 这可能会回答你的问题 – Naruto

回答

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。因此,如果如searchfield的一部分hits将为1 + 1 + 0 = 2.然后按降序对行进行排序,以便首先获得最多命中的行。

现在我不知道你在searchfield存储的东西,但如果它包含空格隔开的话,你可以围绕与空白搜索词以及(如'% sea %'),这样你就不会在海马获得匹配。这会给你一个searchfield中的第一个和最后一个单词的问题,虽然他们之前和之后都没有空格。