2011-06-20 41 views
0

當我搜索:與截斷exclutions話布爾搜索不爲我工作

SELECT * FROM db.test 
WHERE 
MATCH(story)AGAINST('(+bananas -banana*)'IN BOOLEAN MODE) 

我得到返回的行,但是當我搜索

SELECT * FROM db.test 
WHERE 
MATCH(story)AGAINST('(+bananas -bananas)'IN BOOLEAN MODE) 

SELECT * FROM db.test 
WHERE 
MATCH(story)AGAINST('(+bananas -bananas*)'IN BOOLEAN MODE) 

我沒有得到任何結果。對我來說,好像你不能和減號一起使用*。 有沒有人知道如果是這種情況,或者如果它在MySql中的設置。

親切的問候 歐萊

表是MyISAM和我對列故事索引。

回答

0

解決方法是跳過括號。如果我搜索'+ bananas-banana *'而不是'(+ bananas -banana *)',它就可以工作。花了一段時間才弄清楚你。

乾杯

+0

嗯,我注意到了那些括號,但我認爲他們不會對查詢產生影響。我試了一下自己,查詢返回的結果與括號相同或不相同,因爲我認爲)-banana *之後沒有任何意義。 – Abhay

1

最後2個查詢不會給出任何結果,因爲它們包含矛盾的條件 - 故事必須有「香蕉」一詞,不能有「香蕉」一詞。這是不可能的,因此沒有結果。

但是,第一個查詢意味着「香蕉」必須存在,但不是「香蕉」。

另外,您可以使用*和減號運算符。

希望這會有所幫助。

+0

我相信,第一行不應該返回任何行,因爲我搜索香蕉不香蕉*;和香蕉*匹配香蕉,bananaleaf bananaboat等。而我的問題是當我用* – Olle

+0

@Olle截取排除詞時:aha正確,我想我沒有注意到你的第一個查詢使用了 - (減號)運算符,如'-banana *'。據我所知,你的第一個查詢不能返回任何結果。即使你做'+ bananas -b *'也不會返回任何結果。我嘗試了一下在我的開發測試運行,我發現搜索(+菲律賓)返回的結果,但(菲律賓-ph *)沒有返回。 – Abhay