2013-02-23 57 views
1

在搜索我的數據庫時,我想要真正相關的結果(由我的布爾搜索返回的結果)排列起來,但同時我不想有點不太相關(類似)的結果完全省略。mysql全文索引搜索布爾模式聯合使用基於類似的搜索

目前我的查詢看起來像這樣。

(SELECT *, MATCH (col1,col2,col3,col4) AGAINST (query* in boolean mode) AS score 
FROM table where match(col1,col2,col3,col4) against (query* in boolean mode) 
order by score DESC) 
    UNION (SELECT * from table where col1 like query 
      or col2 like query or col2 like query or col4 like query) 

這會返回一個錯誤,指出給定的兩個select子句具有不同數量的列。我明白這是因爲「分數」被添加爲查詢第一部分的一列。
有沒有解決這個問題的方法?

回答

1

只需在第二個查詢中添加一個虛假的列分數,並使用列別名。你不需要使用這個值,但會使工會工作。 例如: -

(SELECT *, MATCH (col1,col2,col3,col4) AGAINST (query* in boolean mode) AS score 
FROM table where match(col1,col2,col3,col4) against (query* in boolean mode) 
order by score DESC) 
UNION (SELECT *, 50 as score from table where col1 like query 
or col2 like query or col2 like query or col4 like query) 

您可以通過任何缺省更換50得分要分配。