Loading myisam/ft_nlq_search.c +13 −9 Original line number Diff line number Diff line Loading @@ -79,6 +79,8 @@ static int walk_and_match(FT_WORD *word, uint32 count, ALL_IN_ONE *aio) #error #endif DBUG_ENTER("walk_and_match"); word->weight=LWS_FOR_QUERY; keylen=_ft_make_key(aio->info,aio->keynr,(char*) aio->keybuff,word,0); Loading Loading @@ -111,7 +113,7 @@ static int walk_and_match(FT_WORD *word, uint32 count, ALL_IN_ONE *aio) #else #error #endif if(tmp_weight==0) return doc_cnt; /* stopword, doc_cnt should be 0 */ if(tmp_weight==0) DBUG_RETURN(doc_cnt); /* stopword, doc_cnt should be 0 */ #ifdef EVAL_RUN cnt=*(byte *)(aio->info->lastkey+keylen); Loading @@ -121,7 +123,7 @@ static int walk_and_match(FT_WORD *word, uint32 count, ALL_IN_ONE *aio) /* saving document matched into dtree */ if (!(selem=tree_insert(&aio->dtree, &sdoc, 0))) return 1; DBUG_RETURN(1); sptr=(FT_SUPERDOC *)ELEMENT_KEY((&aio->dtree), selem); Loading Loading @@ -152,21 +154,22 @@ static int walk_and_match(FT_WORD *word, uint32 count, ALL_IN_ONE *aio) if (doc_cnt) { word->weight*=GWS_IN_USE; if (word->weight < 0) word->weight=0; if (word->weight < 0) word->weight=0; } return 0; DBUG_RETURN(0); } static int walk_and_copy(FT_SUPERDOC *from, uint32 count __attribute__((unused)), FT_DOC **to) { DBUG_ENTER("walk_and_copy"); from->doc.weight+=from->tmp_weight*from->word_ptr->weight; (*to)->dpos=from->doc.dpos; (*to)->weight=from->doc.weight; (*to)++; return 0; DBUG_RETURN(0); } Loading @@ -184,12 +187,13 @@ FT_INFO *ft_init_nlq_search(MI_INFO *info, uint keynr, byte *query, FT_DOC *dptr; FT_INFO *dlist=NULL; my_off_t saved_lastpos=info->lastpos; DBUG_ENTER("ft_init_nlq_search"); /* black magic ON */ if ((int) (keynr = _mi_check_index(info,keynr)) < 0) return NULL; DBUG_RETURN(NULL); if (_mi_readinfo(info,F_RDLCK,1)) return NULL; DBUG_RETURN(NULL); /* black magic OFF */ aio.info=info; Loading Loading @@ -236,7 +240,7 @@ FT_INFO *ft_init_nlq_search(MI_INFO *info, uint keynr, byte *query, err: info->lastpos=saved_lastpos; return dlist; DBUG_RETURN(dlist); } Loading myisam/ft_parser.c +8 −4 Original line number Diff line number Diff line Loading @@ -186,6 +186,7 @@ byte ft_simple_get_word(byte **start, byte *end, FT_WORD *word) { byte *doc=*start; int mwc; DBUG_ENTER("ft_simple_get_word"); while (doc<end) { Loading @@ -207,32 +208,35 @@ byte ft_simple_get_word(byte **start, byte *end, FT_WORD *word) !is_stopword(word->pos, word->len)) { *start=doc; return 1; DBUG_RETURN(1); } } return 0; DBUG_RETURN(0); } void ft_parse_init(TREE *wtree, CHARSET_INFO *cs) { DBUG_ENTER("ft_parse_init"); if (!is_tree_inited(wtree)) init_tree(wtree,0,0,sizeof(FT_WORD),(qsort_cmp2)&FT_WORD_cmp,0,NULL, cs); DBUG_VOID_RETURN; } int ft_parse(TREE *wtree, byte *doc, int doclen) { byte *end=doc+doclen; FT_WORD w; DBUG_ENTER("ft_parse"); while (ft_simple_get_word(&doc,end,&w)) { if (!tree_insert(wtree, &w, 0)) goto err; } return 0; DBUG_RETURN(0); err: delete_tree(wtree); return 1; DBUG_RETURN(1); } myisam/ftdefs.h +1 −1 Original line number Diff line number Diff line Loading @@ -78,7 +78,7 @@ extern ulong collstat; /* Mysterious, but w/o (double) GWS_IDF performs better :-o */ #define GWS_IDF log(aio->info->state->records/doc_cnt) #define GWS_IDF1 log((double)aio->info->state->records/doc_cnt) #define GWS_PROB log(((double)(aio->info->state->records-doc_cnt))/doc_cnt) #define GWS_PROB ((aio->info->state->records > doc_cnt) ? log(((double)(aio->info->state->records-doc_cnt))/doc_cnt) : 0 ) #define GWS_FREQ (1.0/doc_cnt) #define GWS_SQUARED pow(log((double)aio->info->state->records/doc_cnt),2) #define GWS_CUBIC pow(log((double)aio->info->state->records/doc_cnt),3) Loading sql/item_func.cc +12 −11 Original line number Diff line number Diff line Loading @@ -2104,8 +2104,9 @@ longlong Item_func_inet_aton::val_int() void Item_func_match::init_search(bool no_order) { DBUG_ENTER("Item_func_match::init_search"); if (ft_handler) return; DBUG_VOID_RETURN; if (key == NO_SUCH_KEY) concat= new Item_func_concat_ws(new Item_string(" ",1), fields); Loading @@ -2116,7 +2117,7 @@ void Item_func_match::init_search(bool no_order) master->init_search(no_order); ft_handler=master->ft_handler; join_key=master->join_key; return; DBUG_VOID_RETURN; } String *ft_tmp=0; Loading @@ -2136,10 +2137,9 @@ void Item_func_match::init_search(bool no_order) join_key && !no_order); if (join_key) { table->file->ft_handler=ft_handler; return; } DBUG_VOID_RETURN; } Loading Loading @@ -2289,13 +2289,14 @@ bool Item_func_match::eq(const Item *item, bool binary_cmp) const double Item_func_match::val() { DBUG_ENTER("Item_func_match::val"); if (ft_handler == NULL) return -1.0; DBUG_RETURN(-1.0); if (join_key) { if (table->file->ft_handler) return ft_handler->please->get_relevance(ft_handler); DBUG_RETURN(ft_handler->please->get_relevance(ft_handler)); join_key=0; } Loading @@ -2303,12 +2304,12 @@ double Item_func_match::val() { String *a= concat->val_str(&value); if ((null_value= (a == 0))) return 0; return ft_handler->please->find_relevance(ft_handler, (byte *)a->ptr(), a->length()); DBUG_RETURN(0); DBUG_RETURN(ft_handler->please->find_relevance(ft_handler, (byte *)a->ptr(), a->length())); } else return ft_handler->please->find_relevance(ft_handler, record, 0); DBUG_RETURN(ft_handler->please->find_relevance(ft_handler, record, 0)); } longlong Item_func_bit_xor::val_int() Loading Loading
myisam/ft_nlq_search.c +13 −9 Original line number Diff line number Diff line Loading @@ -79,6 +79,8 @@ static int walk_and_match(FT_WORD *word, uint32 count, ALL_IN_ONE *aio) #error #endif DBUG_ENTER("walk_and_match"); word->weight=LWS_FOR_QUERY; keylen=_ft_make_key(aio->info,aio->keynr,(char*) aio->keybuff,word,0); Loading Loading @@ -111,7 +113,7 @@ static int walk_and_match(FT_WORD *word, uint32 count, ALL_IN_ONE *aio) #else #error #endif if(tmp_weight==0) return doc_cnt; /* stopword, doc_cnt should be 0 */ if(tmp_weight==0) DBUG_RETURN(doc_cnt); /* stopword, doc_cnt should be 0 */ #ifdef EVAL_RUN cnt=*(byte *)(aio->info->lastkey+keylen); Loading @@ -121,7 +123,7 @@ static int walk_and_match(FT_WORD *word, uint32 count, ALL_IN_ONE *aio) /* saving document matched into dtree */ if (!(selem=tree_insert(&aio->dtree, &sdoc, 0))) return 1; DBUG_RETURN(1); sptr=(FT_SUPERDOC *)ELEMENT_KEY((&aio->dtree), selem); Loading Loading @@ -152,21 +154,22 @@ static int walk_and_match(FT_WORD *word, uint32 count, ALL_IN_ONE *aio) if (doc_cnt) { word->weight*=GWS_IN_USE; if (word->weight < 0) word->weight=0; if (word->weight < 0) word->weight=0; } return 0; DBUG_RETURN(0); } static int walk_and_copy(FT_SUPERDOC *from, uint32 count __attribute__((unused)), FT_DOC **to) { DBUG_ENTER("walk_and_copy"); from->doc.weight+=from->tmp_weight*from->word_ptr->weight; (*to)->dpos=from->doc.dpos; (*to)->weight=from->doc.weight; (*to)++; return 0; DBUG_RETURN(0); } Loading @@ -184,12 +187,13 @@ FT_INFO *ft_init_nlq_search(MI_INFO *info, uint keynr, byte *query, FT_DOC *dptr; FT_INFO *dlist=NULL; my_off_t saved_lastpos=info->lastpos; DBUG_ENTER("ft_init_nlq_search"); /* black magic ON */ if ((int) (keynr = _mi_check_index(info,keynr)) < 0) return NULL; DBUG_RETURN(NULL); if (_mi_readinfo(info,F_RDLCK,1)) return NULL; DBUG_RETURN(NULL); /* black magic OFF */ aio.info=info; Loading Loading @@ -236,7 +240,7 @@ FT_INFO *ft_init_nlq_search(MI_INFO *info, uint keynr, byte *query, err: info->lastpos=saved_lastpos; return dlist; DBUG_RETURN(dlist); } Loading
myisam/ft_parser.c +8 −4 Original line number Diff line number Diff line Loading @@ -186,6 +186,7 @@ byte ft_simple_get_word(byte **start, byte *end, FT_WORD *word) { byte *doc=*start; int mwc; DBUG_ENTER("ft_simple_get_word"); while (doc<end) { Loading @@ -207,32 +208,35 @@ byte ft_simple_get_word(byte **start, byte *end, FT_WORD *word) !is_stopword(word->pos, word->len)) { *start=doc; return 1; DBUG_RETURN(1); } } return 0; DBUG_RETURN(0); } void ft_parse_init(TREE *wtree, CHARSET_INFO *cs) { DBUG_ENTER("ft_parse_init"); if (!is_tree_inited(wtree)) init_tree(wtree,0,0,sizeof(FT_WORD),(qsort_cmp2)&FT_WORD_cmp,0,NULL, cs); DBUG_VOID_RETURN; } int ft_parse(TREE *wtree, byte *doc, int doclen) { byte *end=doc+doclen; FT_WORD w; DBUG_ENTER("ft_parse"); while (ft_simple_get_word(&doc,end,&w)) { if (!tree_insert(wtree, &w, 0)) goto err; } return 0; DBUG_RETURN(0); err: delete_tree(wtree); return 1; DBUG_RETURN(1); }
myisam/ftdefs.h +1 −1 Original line number Diff line number Diff line Loading @@ -78,7 +78,7 @@ extern ulong collstat; /* Mysterious, but w/o (double) GWS_IDF performs better :-o */ #define GWS_IDF log(aio->info->state->records/doc_cnt) #define GWS_IDF1 log((double)aio->info->state->records/doc_cnt) #define GWS_PROB log(((double)(aio->info->state->records-doc_cnt))/doc_cnt) #define GWS_PROB ((aio->info->state->records > doc_cnt) ? log(((double)(aio->info->state->records-doc_cnt))/doc_cnt) : 0 ) #define GWS_FREQ (1.0/doc_cnt) #define GWS_SQUARED pow(log((double)aio->info->state->records/doc_cnt),2) #define GWS_CUBIC pow(log((double)aio->info->state->records/doc_cnt),3) Loading
sql/item_func.cc +12 −11 Original line number Diff line number Diff line Loading @@ -2104,8 +2104,9 @@ longlong Item_func_inet_aton::val_int() void Item_func_match::init_search(bool no_order) { DBUG_ENTER("Item_func_match::init_search"); if (ft_handler) return; DBUG_VOID_RETURN; if (key == NO_SUCH_KEY) concat= new Item_func_concat_ws(new Item_string(" ",1), fields); Loading @@ -2116,7 +2117,7 @@ void Item_func_match::init_search(bool no_order) master->init_search(no_order); ft_handler=master->ft_handler; join_key=master->join_key; return; DBUG_VOID_RETURN; } String *ft_tmp=0; Loading @@ -2136,10 +2137,9 @@ void Item_func_match::init_search(bool no_order) join_key && !no_order); if (join_key) { table->file->ft_handler=ft_handler; return; } DBUG_VOID_RETURN; } Loading Loading @@ -2289,13 +2289,14 @@ bool Item_func_match::eq(const Item *item, bool binary_cmp) const double Item_func_match::val() { DBUG_ENTER("Item_func_match::val"); if (ft_handler == NULL) return -1.0; DBUG_RETURN(-1.0); if (join_key) { if (table->file->ft_handler) return ft_handler->please->get_relevance(ft_handler); DBUG_RETURN(ft_handler->please->get_relevance(ft_handler)); join_key=0; } Loading @@ -2303,12 +2304,12 @@ double Item_func_match::val() { String *a= concat->val_str(&value); if ((null_value= (a == 0))) return 0; return ft_handler->please->find_relevance(ft_handler, (byte *)a->ptr(), a->length()); DBUG_RETURN(0); DBUG_RETURN(ft_handler->please->find_relevance(ft_handler, (byte *)a->ptr(), a->length())); } else return ft_handler->please->find_relevance(ft_handler, record, 0); DBUG_RETURN(ft_handler->please->find_relevance(ft_handler, record, 0)); } longlong Item_func_bit_xor::val_int() Loading