在MYSQL中进行加权全文搜索最有效的方法是什么?

问题描述 投票:0回答:2

为了给不同的列不同的权重,当然可以使用:

select   ... 
from     table_name 
where    match(column1,column2...columnn) against('+test..') 
order by weight1*(match (column1) against('test..')) 
       + weight2*(match (column2) against('+test..')) 
       + ...
       + weightn*(match (column1) against('test..'))

但是当结果量很大时,上述 order by 的成本可能会非常高!

有没有更有效的方法来做到这一点?

mysql full-text-search
2个回答
0
投票

使用思维狮身人面像,http://freelancing-god.github.com/ts/en/


0
投票

这是一个老问题,但由于这里没有答案,所以我会尝试一下。

在我看来,最有效的方法是不重复索引。由于MySQL引擎会重用重复的查询,因此如果每个索引只单独查询一次,则可以节省一点。例如,在原来的问题中,您有一个索引,其中包含要查询的所有字段,然后单独查询每个字段。如果您取消单个索引并在两个位置查询每个单独的索引,那么效率会更高一些。像这样的东西:

select   ... 
from     table_name 
where    match (column1) against('test..')
         OR match (column2) against('+test..')
         OR match (columnN) against('test..')
order by weight1*(match (column1) against('test..')) 
       + weight2*(match (column2) against('+test..')) 
       + ...
       + weightN*(match (columnN) against('test..'))

通过按顺序和位置重用查询,您将不会运行不必要的查询。它仍然不是单个文本搜索中真正的加权搜索,但至少好一点。

© www.soinside.com 2019 - 2024. All rights reserved.