2010-08-05 68 views
1

我收到的結果很難理解。我希望有人能夠對這個問題提出一些看法。全文搜索Mysql - 不合邏輯的行爲

我有一個非常簡單的表在MySQL:

 
id| text 
1 | testA testB testC 
2 | testA testB 

當我運行以下查詢:

SELECT id, MATCH (text) AGAINST ('+(+testA testB) +testC' IN BOOLEAN MODE) as score FROM test_fulltext 

我得到以下不正確的結果(請注意,第二行應該返回0)

 
id| score 
1 | 1,1666667461395 
2 | 0,66666668653488 

但是,當我運行稍微修改版本的查詢(在t之前沒有'+'符號ESTA):

SELECT id, MATCH (text) AGAINST ('+(testA testB) +testC' IN BOOLEAN MODE) as score FROM test_fulltext 

我得到正確的結果:

 
id| score 
1 | 1,3333333730698 
2 | 0 

你有,爲什麼第一個查詢的第二行匹配的任何想法? 它在mysql 4.1和5.0.5上都有。

你知道我在哪裏可以找到解析全文查詢的源代碼嗎? 或解釋如何計算的任何其他信息來源。歡迎任何幫助。

+1

您可以從mysql網站下載源代碼(只需選擇'source'而不是os/distribution),邏輯位於'storage/myisam/ft_parser.c' – Wrikken 2010-08-05 17:02:37

+0

@wrikken謝謝! – 2010-08-05 20:22:07

回答