2014-04-09 101 views
1

我希望有人來幫助我解決這個場景: 我有一個包含條目的表。我想執行查詢並根據模式獲得最高分的記錄。 該模式將是:如果我的單詞出現,那麼分數將是該條目的最高分數。如果該單詞在句子中出現,那麼該條目的分數將低於先前的情況。MySQL MATCH-AGAINST場景

e.g: 項 取值範:蘋果 ENTRY2:每

如果我搜索「蘋果」一個蘋果,我想的取值範有得分高於ENTRY2。

所以我做了這個查詢:

SELECT 
entry, 
MATCH 
(entry) 
AGAINST 
('>("apple") <(apple*)' IN BOOLEAN MODE) 
AS 
Score 
FROM 
entries 
WHERE 
MATCH 
(entry) 
AGAINST 
('>("apple") <(apple*)' IN BOOLEAN MODE) 
LIMIT 1 

但它是錯誤的。此查詢返回兩個句子(「蘋果」和「每天一個蘋果」)相同的分數,因爲單詞「蘋果」出現在它們兩個中。 關於AGAINST()模式會有什麼建議?

回答

0
SELECT 
    entry, 
    MATCH (entry) AGAINST ('>("apple") <(apple*)' IN BOOLEAN MODE) AS Score 
FROM entries 
WHERE MATCH (entry) AGAINST ('>("apple") <(apple*)' IN BOOLEAN MODE) 
ORDER BY LENGTH(entry) 
LIMIT 1; 
+0

這是一個非常好的做法,在我的情況下工作!但是有沒有什麼辦法可以根據我提到的模式來實現不同的分數呢? – alexgeorg86

+0

我看不出有什麼辦法可以做到這一點。除非有某種方式可以將分數除以輸入長度。我認爲你可以做的最好的是按照長度排序(輸入)ASC,Score DESC。 –