diff --git a/myisam/ft_boolean_search.c b/myisam/ft_boolean_search.c index c71284642287b6ad0a7b3b36bfe2d7b29140c67c..799022a5a0d7f51144250d11426ea4f7a8df091f 100644 --- a/myisam/ft_boolean_search.c +++ b/myisam/ft_boolean_search.c @@ -55,8 +55,9 @@ static double _nwghts[11]= static double *nwghts=_nwghts+5; /* nwghts[i] = -0.5*1.5**i */ #define FTB_FLAG_TRUNC 1 /* MUST be 1 */ -#define FTB_FLAG_YES 2 /* These two - YES and NO */ -#define FTB_FLAG_NO 4 /* should NEVER be set both */ +#define FTB_FLAG_YES 2 /* no two from these three */ +#define FTB_FLAG_NO 4 /* YES, NO, WONLY */ +#define FTB_FLAG_WONLY 8 /* should be ever set both */ typedef struct st_ftb_expr FTB_EXPR; struct st_ftb_expr @@ -444,7 +445,8 @@ static void _ftb_climb_the_tree(FTB *ftb, FTB_WORD *ftbw, FT_SEG_ITERATOR *ftsi_ ftbe->cur_weight += weight; if (ftbe->yesses < ythresh) break; - yn= (ftbe->yesses++ == ythresh) ? ftbe->flags : 0 ; + if (!(yn & FTB_FLAG_WONLY)) + yn= (ftbe->yesses++ == ythresh) ? ftbe->flags : FTB_FLAG_WONLY ; weight*= ftbe->weight; } } diff --git a/mysql-test/r/fulltext.result b/mysql-test/r/fulltext.result index 651baad266e554d8ee068b05ff280c41a7c6ff77..738941f63c706595a9c0e30fae70432b2a2a4425 100644 --- a/mysql-test/r/fulltext.result +++ b/mysql-test/r/fulltext.result @@ -117,6 +117,10 @@ MySQL has now support for full-text search select * from t1 where MATCH a,b AGAINST ('"text i"' IN BOOLEAN MODE); a b Full-text indexes are called collections +select * from t1 where MATCH a,b AGAINST ('+(support collections) +foobar*' IN BOOLEAN MODE); +a b +select * from t1 where MATCH a,b AGAINST ('+(+(support collections)) +foobar*' IN BOOLEAN MODE); +a b select * from t1 where MATCH a AGAINST ("search" IN BOOLEAN MODE); a b Full-text search in MySQL implements vector space model diff --git a/mysql-test/t/fulltext.test b/mysql-test/t/fulltext.test index 02657ba37753f5522fb384ee27439b47da8b2e07..774a3b4261987a2277f6797eacd8657b51c71526 100644 --- a/mysql-test/t/fulltext.test +++ b/mysql-test/t/fulltext.test @@ -18,7 +18,6 @@ select * from t1 where MATCH(a,b) AGAINST ("collections"); select * from t1 where MATCH(a,b) AGAINST ("indexes"); select * from t1 where MATCH(a,b) AGAINST ("indexes collections"); - # add_ft_keys() tests explain select * from t1 where MATCH(a,b) AGAINST ("collections"); @@ -54,6 +53,9 @@ select * from t1 where MATCH a,b AGAINST ('"text search" -"now support"' IN BOOL select * from t1 where MATCH a,b AGAINST ('"text search" +"now support"' IN BOOLEAN MODE); select * from t1 where MATCH a,b AGAINST ('"text i"' IN BOOLEAN MODE); +select * from t1 where MATCH a,b AGAINST ('+(support collections) +foobar*' IN BOOLEAN MODE); +select * from t1 where MATCH a,b AGAINST ('+(+(support collections)) +foobar*' IN BOOLEAN MODE); + # boolean w/o index: select * from t1 where MATCH a AGAINST ("search" IN BOOLEAN MODE);