diff options
author | unknown <serg@serg.mysql.com> | 2001-11-28 17:55:45 +0100 |
---|---|---|
committer | unknown <serg@serg.mysql.com> | 2001-11-28 17:55:45 +0100 |
commit | f3918c8413199fff3339a62498ecc42d8c540c3a (patch) | |
tree | caee073830ac75c7f6485bf0a5d92ffda5d16255 /myisam/ft_boolean_search.c | |
parent | 056c71f1ae445b96c13e241d40a729f16e65bb4a (diff) | |
download | mariadb-git-f3918c8413199fff3339a62498ecc42d8c540c3a.tar.gz |
boolean fulltext search without an index
myisam/ft_dump.c:
some help added
Diffstat (limited to 'myisam/ft_boolean_search.c')
-rw-r--r-- | myisam/ft_boolean_search.c | 22 |
1 files changed, 15 insertions, 7 deletions
diff --git a/myisam/ft_boolean_search.c b/myisam/ft_boolean_search.c index 70ba7fc9df2..0055842c24b 100644 --- a/myisam/ft_boolean_search.c +++ b/myisam/ft_boolean_search.c @@ -152,13 +152,16 @@ void _ftb_init_index_search(FT_INFO *ftb) int i, r; FTB_WORD *ftbw; MI_INFO *info=ftb->info; - MI_KEYDEF *keyinfo=info->s->keyinfo+ftb->keynr; - my_off_t keyroot=info->s->state.key_root[ftb->keynr]; + MI_KEYDEF *keyinfo; + my_off_t keyroot; - if (ftb->state != READY) + if (ftb->state != READY || ftb->keynr == NO_SUCH_KEY) return; ftb->state=INDEX_SEARCH; + keyinfo=info->s->keyinfo+ftb->keynr; + keyroot=info->s->state.key_root[ftb->keynr]; + for (i=ftb->queue.elements; i; i--) { ftbw=(FTB_WORD *)(ftb->queue.root[i]); @@ -352,14 +355,17 @@ int ft_boolean_read_next(FT_INFO *ftb, char *record) return my_errno=HA_ERR_END_OF_FILE; } -float ft_boolean_find_relevance(FT_INFO *ftb, my_off_t docid, byte *record) +float ft_boolean_find_relevance(FT_INFO *ftb, byte *record, uint length) { TREE ptree; FT_WORD word; FTB_WORD *ftbw; FTB_EXPR *ftbe; uint i; + my_off_t docid=ftb->info->lastpos; + if (docid == HA_POS_ERROR) + return -2.0; if (ftb->state == READY || ftb->state == INDEX_DONE) { for (i=1; i<=ftb->queue.elements; i++) @@ -382,11 +388,13 @@ float ft_boolean_find_relevance(FT_INFO *ftb, my_off_t docid, byte *record) ftb->state=SCAN; } else if (ftb->state != SCAN) - return -2.0; + return -3.0; bzero(&ptree, sizeof(ptree)); - if (_mi_ft_parse(& ptree, ftb->info, ftb->keynr, record)) - return -3.0; + if ((ftb->keynr==NO_SUCH_KEY) + ? ft_parse(& ptree, record, length) + : _mi_ft_parse(& ptree, ftb->info, ftb->keynr, record)) + return -4.0; for (i=1; i<=ftb->queue.elements; i++) { |