Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
M
mariadb
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Kirill Smelkov
mariadb
Commits
a910daca
Commit
a910daca
authored
Dec 11, 2001
by
serg@serg.mysql.com
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
rewrote ft_boolean_find_relevance() to use ft_segiterator
parent
e9595dee
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
37 additions
and
29 deletions
+37
-29
myisam/ft_boolean_search.c
myisam/ft_boolean_search.c
+35
-24
myisam/ft_update.c
myisam/ft_update.c
+2
-5
No files found.
myisam/ft_boolean_search.c
View file @
a910daca
...
...
@@ -359,10 +359,11 @@ int ft_boolean_read_next(FT_INFO *ftb, char *record)
float
ft_boolean_find_relevance
(
FT_INFO
*
ftb
,
byte
*
record
,
uint
length
)
{
TREE
ptree
;
FT_WORD
word
;
FT_WORD
word
;
FTB_WORD
*
ftbw
;
FTB_EXPR
*
ftbe
;
FT_SEG_ITERATOR
ftsi
;
const
byte
*
end
;
uint
i
;
my_off_t
docid
=
ftb
->
info
->
lastpos
;
...
...
@@ -393,33 +394,43 @@ float ft_boolean_find_relevance(FT_INFO *ftb, byte *record, uint length)
else
if
(
ftb
->
state
!=
SCAN
)
return
-
3
.
0
;
bzero
(
&
ptree
,
sizeof
(
ptree
));
if
((
ftb
->
keynr
==
NO_SUCH_KEY
)
?
ft_parse
(
&
ptree
,
record
,
length
)
:
_mi_ft_parse
(
&
ptree
,
ftb
->
info
,
ftb
->
keynr
,
record
))
return
-
4
.
0
;
if
(
ftb
->
keynr
==
NO_SUCH_KEY
)
_mi_ft_segiterator_dummy_init
(
record
,
length
,
&
ftsi
);
else
_mi_ft_segiterator_init
(
ftb
->
info
,
ftb
->
keynr
,
record
,
&
ftsi
);
for
(
i
=
1
;
i
<=
ftb
->
queue
.
elements
;
i
++
)
while
(
_mi_ft_segiterator
(
&
ftsi
)
)
{
ftbw
=
(
FTB_WORD
*
)(
ftb
->
queue
.
root
[
i
]);
ftbw
->
docid
=
docid
;
ptree
.
custom_arg
=
(
void
*
)(
ftbw
->
trunc
);
word
.
pos
=
ftbw
->
word
+
1
;
word
.
len
=
ftbw
->
len
-
1
;
if
(
tree_search
(
&
ptree
,
&
word
))
{
/* found! */
_ftb_climb_the_tree
(
ftbw
);
}
else
{
/* not found! */
if
(
ftbw
->
yesno
>
0
&&
ftbw
->
up
->
up
==
0
)
{
/* but this word MUST BE present in every document matched,
so we can stop the search right now */
break
;
if
(
!
ftsi
.
pos
)
continue
;
end
=
ftsi
.
pos
+
ftsi
.
len
;
while
(
ft_simple_get_word
((
byte
**
)
&
ftsi
.
pos
,(
byte
*
)
end
,
&
word
))
{
uint
a
,
b
,
c
;
for
(
a
=
1
,
b
=
ftb
->
queue
.
elements
+
1
,
c
=
(
a
+
b
)
/
2
;
b
-
a
>
1
;
c
=
(
a
+
b
)
/
2
)
{
ftbw
=
(
FTB_WORD
*
)(
ftb
->
queue
.
root
[
c
]);
if
(
_mi_compare_text
(
default_charset_info
,
word
.
pos
,
word
.
len
,
(
uchar
*
)
ftbw
->
word
+
1
,
ftbw
->
len
-
1
,
ftbw
->
trunc
)
>
0
)
b
=
c
;
else
a
=
c
;
}
for
(;
c
;
c
--
)
{
ftbw
=
(
FTB_WORD
*
)(
ftb
->
queue
.
root
[
c
]);
if
(
_mi_compare_text
(
default_charset_info
,
word
.
pos
,
word
.
len
,
(
uchar
*
)
ftbw
->
word
+
1
,
ftbw
->
len
-
1
,
ftbw
->
trunc
))
break
;
if
(
ftbw
->
docid
==
docid
)
continue
;
ftbw
->
docid
=
docid
;
_ftb_climb_the_tree
(
ftbw
);
}
}
}
delete_tree
(
&
ptree
);
ftbe
=
ftb
->
root
;
if
(
ftbe
->
docid
==
docid
&&
ftbe
->
cur_weight
>
0
&&
ftbe
->
yesses
>=
ftbe
->
ythresh
&&
!
ftbe
->
nos
)
...
...
myisam/ft_update.c
View file @
a910daca
...
...
@@ -55,12 +55,9 @@ void _mi_ft_segiterator_dummy_init(const byte *record, uint len,
uint
_mi_ft_segiterator
(
register
FT_SEG_ITERATOR
*
ftsi
)
{
if
(
!
ftsi
->
num
)
return
0
;
if
(
!
ftsi
->
seg
)
return
1
;
if
(
!
ftsi
->
num
)
return
0
;
else
ftsi
->
num
--
;
if
(
!
ftsi
->
seg
)
return
1
;
else
ftsi
->
seg
--
;
ftsi
->
seg
--
;
ftsi
->
num
--
;
if
(
ftsi
->
seg
->
null_bit
&&
(
ftsi
->
rec
[
ftsi
->
seg
->
null_pos
]
&
ftsi
->
seg
->
null_bit
))
{
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment