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
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
nexedi
MariaDB
Commits
59f3a958
Commit
59f3a958
authored
Nov 22, 2001
by
serg@serg.mysql.com
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
ft_boolean_syntax variable
parent
307fb4a3
Changes
8
Hide whitespace changes
Inline
Side-by-side
Showing
8 changed files
with
49 additions
and
46 deletions
+49
-46
include/ft_global.h
include/ft_global.h
+1
-0
myisam/ft_boolean_search.c
myisam/ft_boolean_search.c
+16
-16
myisam/ft_nlq_search.c
myisam/ft_nlq_search.c
+1
-1
myisam/ft_parser.c
myisam/ft_parser.c
+18
-20
myisam/ft_static.c
myisam/ft_static.c
+1
-0
myisam/ftdefs.h
myisam/ftdefs.h
+9
-8
mysql-test/r/fulltext_var.result
mysql-test/r/fulltext_var.result
+1
-0
sql/mysqld.cc
sql/mysqld.cc
+2
-1
No files found.
include/ft_global.h
View file @
59f3a958
...
@@ -49,6 +49,7 @@ extern const char *ft_precompiled_stopwords[];
...
@@ -49,6 +49,7 @@ extern const char *ft_precompiled_stopwords[];
extern
ulong
ft_min_word_len
;
extern
ulong
ft_min_word_len
;
extern
ulong
ft_max_word_len
;
extern
ulong
ft_max_word_len
;
extern
ulong
ft_max_word_len_for_sort
;
extern
ulong
ft_max_word_len_for_sort
;
extern
char
*
ft_boolean_syntax
;
int
ft_init_stopwords
(
const
char
**
);
int
ft_init_stopwords
(
const
char
**
);
void
ft_free_stopwords
(
void
);
void
ft_free_stopwords
(
void
);
...
...
myisam/ft_boolean_search.c
View file @
59f3a958
...
@@ -36,7 +36,7 @@ static double _wghts[11]={
...
@@ -36,7 +36,7 @@ static double _wghts[11]={
3
.
375000000000000
,
3
.
375000000000000
,
5
.
062500000000000
,
5
.
062500000000000
,
7
.
593750000000000
};
7
.
593750000000000
};
static
double
*
wghts
=
_wghts
+
5
;
/
/ wghts[i] = 1.5**i
static
double
*
wghts
=
_wghts
+
5
;
/
* wghts[i] = 1.5**i */
static
double
_nwghts
[
11
]
=
{
static
double
_nwghts
[
11
]
=
{
-
0
.
065
843621399177
,
-
0
.
065
843621399177
,
...
@@ -50,7 +50,7 @@ static double _nwghts[11]={
...
@@ -50,7 +50,7 @@ static double _nwghts[11]={
-
1
.
687500000000000
,
-
1
.
687500000000000
,
-
2
.
531250000000000
,
-
2
.
531250000000000
,
-
3
.
796875000000000
};
-
3
.
796875000000000
};
static
double
*
nwghts
=
_nwghts
+
5
;
/
/ nwghts[i] = -0.5*1.5**i
static
double
*
nwghts
=
_nwghts
+
5
;
/
* nwghts[i] = -0.5*1.5**i */
typedef
struct
st_ftb_expr
FTB_EXPR
;
typedef
struct
st_ftb_expr
FTB_EXPR
;
struct
st_ftb_expr
{
struct
st_ftb_expr
{
...
@@ -114,20 +114,7 @@ void _ftb_parse_query(FTB *ftb, byte **start, byte *end,
...
@@ -114,20 +114,7 @@ void _ftb_parse_query(FTB *ftb, byte **start, byte *end,
byte
r
=
param
.
plusminus
;
byte
r
=
param
.
plusminus
;
float
weight
=
(
param
.
pmsign
?
nwghts
:
wghts
)[(
r
>
5
)
?
5
:
((
r
<-
5
)
?-
5
:
r
)];
float
weight
=
(
param
.
pmsign
?
nwghts
:
wghts
)[(
r
>
5
)
?
5
:
((
r
<-
5
)
?-
5
:
r
)];
switch
(
res
)
{
switch
(
res
)
{
case
FTB_LBR
:
case
1
:
/* word found */
ftbe
=
(
FTB_EXPR
*
)
alloc_root
(
&
ftb
->
mem_root
,
sizeof
(
FTB_EXPR
));
ftbe
->
yesno
=
param
.
yesno
;
ftbe
->
weight
=
weight
;
ftbe
->
up
=
up
;
ftbe
->
ythresh
=
0
;
ftbe
->
docid
=
HA_POS_ERROR
;
if
(
ftbe
->
yesno
>
0
)
up
->
ythresh
++
;
_ftb_parse_query
(
ftb
,
start
,
end
,
ftbe
,
depth
+
1
,
(
param
.
yesno
<
0
?
depth
+
1
:
ndepth
));
break
;
case
FTB_RBR
:
return
;
case
1
:
ftbw
=
(
FTB_WORD
*
)
alloc_root
(
&
ftb
->
mem_root
,
ftbw
=
(
FTB_WORD
*
)
alloc_root
(
&
ftb
->
mem_root
,
sizeof
(
FTB_WORD
)
+
(
param
.
trunc
?
MI_MAX_KEY_BUFF
:
w
.
len
+
extra
));
sizeof
(
FTB_WORD
)
+
(
param
.
trunc
?
MI_MAX_KEY_BUFF
:
w
.
len
+
extra
));
ftbw
->
len
=
w
.
len
+
1
;
ftbw
->
len
=
w
.
len
+
1
;
...
@@ -142,6 +129,19 @@ void _ftb_parse_query(FTB *ftb, byte **start, byte *end,
...
@@ -142,6 +129,19 @@ void _ftb_parse_query(FTB *ftb, byte **start, byte *end,
if
(
ftbw
->
yesno
>
0
)
up
->
ythresh
++
;
if
(
ftbw
->
yesno
>
0
)
up
->
ythresh
++
;
queue_insert
(
&
ftb
->
queue
,
(
byte
*
)
ftbw
);
queue_insert
(
&
ftb
->
queue
,
(
byte
*
)
ftbw
);
break
;
break
;
case
2
:
/* left bracket */
ftbe
=
(
FTB_EXPR
*
)
alloc_root
(
&
ftb
->
mem_root
,
sizeof
(
FTB_EXPR
));
ftbe
->
yesno
=
param
.
yesno
;
ftbe
->
weight
=
weight
;
ftbe
->
up
=
up
;
ftbe
->
ythresh
=
0
;
ftbe
->
docid
=
HA_POS_ERROR
;
if
(
ftbe
->
yesno
>
0
)
up
->
ythresh
++
;
_ftb_parse_query
(
ftb
,
start
,
end
,
ftbe
,
depth
+
1
,
(
param
.
yesno
<
0
?
depth
+
1
:
ndepth
));
break
;
case
3
:
/* right bracket */
return
;
}
}
}
}
return
;
return
;
...
...
myisam/ft_nlq_search.c
View file @
59f3a958
...
@@ -253,7 +253,7 @@ float ft_nlq_find_relevance(FT_INFO *handler, my_off_t docid,
...
@@ -253,7 +253,7 @@ float ft_nlq_find_relevance(FT_INFO *handler, my_off_t docid,
int
a
,
b
,
c
;
int
a
,
b
,
c
;
FT_DOC
*
docs
=
handler
->
doc
;
FT_DOC
*
docs
=
handler
->
doc
;
/
/ Assuming docs[] is sorted by dpos...
/
* Assuming docs[] is sorted by dpos... */
for
(
a
=
0
,
b
=
handler
->
ndocs
,
c
=
(
a
+
b
)
/
2
;
b
-
a
>
1
;
c
=
(
a
+
b
)
/
2
)
for
(
a
=
0
,
b
=
handler
->
ndocs
,
c
=
(
a
+
b
)
/
2
;
b
-
a
>
1
;
c
=
(
a
+
b
)
/
2
)
{
{
...
...
myisam/ft_parser.c
View file @
59f3a958
...
@@ -33,9 +33,6 @@ typedef struct st_ft_docstat {
...
@@ -33,9 +33,6 @@ typedef struct st_ft_docstat {
double
max
,
nsum
,
nsum2
;
double
max
,
nsum
,
nsum2
;
#endif
/* EVAL_RUN */
#endif
/* EVAL_RUN */
// MI_INFO *info;
// uint keynr;
// byte *keybuf;
}
FT_DOCSTAT
;
}
FT_DOCSTAT
;
static
int
FT_WORD_cmp
(
void
*
cmp_arg
,
FT_WORD
*
w1
,
FT_WORD
*
w2
)
static
int
FT_WORD_cmp
(
void
*
cmp_arg
,
FT_WORD
*
w1
,
FT_WORD
*
w2
)
...
@@ -63,9 +60,7 @@ static int walk_and_copy(FT_WORD *word,uint32 count,FT_DOCSTAT *docstat)
...
@@ -63,9 +60,7 @@ static int walk_and_copy(FT_WORD *word,uint32 count,FT_DOCSTAT *docstat)
/* transforms tree of words into the array, applying normalization */
/* transforms tree of words into the array, applying normalization */
FT_WORD
*
ft_linearize
(
//MI_INFO *info, uint keynr,
FT_WORD
*
ft_linearize
(
TREE
*
wtree
)
//byte *keybuf,
TREE
*
wtree
)
{
{
FT_WORD
*
wlist
,
*
p
;
FT_WORD
*
wlist
,
*
p
;
FT_DOCSTAT
docstat
;
FT_DOCSTAT
docstat
;
...
@@ -74,9 +69,6 @@ FT_WORD * ft_linearize(//MI_INFO *info, uint keynr,
...
@@ -74,9 +69,6 @@ FT_WORD * ft_linearize(//MI_INFO *info, uint keynr,
if
((
wlist
=
(
FT_WORD
*
)
my_malloc
(
sizeof
(
FT_WORD
)
*
if
((
wlist
=
(
FT_WORD
*
)
my_malloc
(
sizeof
(
FT_WORD
)
*
(
1
+
wtree
->
elements_in_tree
),
MYF
(
0
))))
(
1
+
wtree
->
elements_in_tree
),
MYF
(
0
))))
{
{
// docstat.info=info;
// docstat.keynr=keynr;
// docstat.keybuf=keybuf;
docstat
.
list
=
wlist
;
docstat
.
list
=
wlist
;
docstat
.
uniq
=
wtree
->
elements_in_tree
;
docstat
.
uniq
=
wtree
->
elements_in_tree
;
#ifdef EVAL_RUN
#ifdef EVAL_RUN
...
@@ -122,12 +114,20 @@ FT_WORD * ft_linearize(//MI_INFO *info, uint keynr,
...
@@ -122,12 +114,20 @@ FT_WORD * ft_linearize(//MI_INFO *info, uint keynr,
#endif
#endif
#define word_char(X) (true_word_char(X) || misc_word_char(X))
#define word_char(X) (true_word_char(X) || misc_word_char(X))
/* returns:
* 0 - eof
* 1 - word found
* 2 - left bracket
* 3 - right bracket
*/
byte
ft_get_word
(
byte
**
start
,
byte
*
end
,
FT_WORD
*
word
,
FTB_PARAM
*
param
)
byte
ft_get_word
(
byte
**
start
,
byte
*
end
,
FT_WORD
*
word
,
FTB_PARAM
*
param
)
{
{
byte
*
doc
=*
start
;
byte
*
doc
=*
start
;
int
mwc
;
int
mwc
;
param
->
yesno
=
param
->
plusminus
=
param
->
pmsign
=
0
;
param
->
yesno
=
(
FTB_YES
==
' '
)
?
1
:
0
;
param
->
plusminus
=
param
->
pmsign
=
0
;
while
(
doc
<
end
)
while
(
doc
<
end
)
{
{
...
@@ -138,18 +138,16 @@ byte ft_get_word(byte **start, byte *end, FT_WORD *word, FTB_PARAM *param)
...
@@ -138,18 +138,16 @@ byte ft_get_word(byte **start, byte *end, FT_WORD *word, FTB_PARAM *param)
{
{
/* param->prev=' '; */
/* param->prev=' '; */
*
start
=
doc
+
1
;
*
start
=
doc
+
1
;
return
*
doc
;
return
(
*
doc
==
FTB_RBR
)
+
2
;
}
}
if
(
param
->
prev
==
' '
)
if
(
param
->
prev
==
' '
)
{
{
switch
(
*
doc
)
{
if
(
*
doc
==
FTB_YES
)
{
param
->
yesno
=+
1
;
continue
;
}
else
case
FTB_YES
:
param
->
yesno
=+
1
;
continue
;
if
(
*
doc
==
FTB_EGAL
)
{
param
->
yesno
=
0
;
continue
;
}
else
case
FTB_NO
:
param
->
yesno
=-
1
;
continue
;
if
(
*
doc
==
FTB_NO
)
{
param
->
yesno
=-
1
;
continue
;
}
else
case
FTB_INC
:
param
->
plusminus
++
;
continue
;
if
(
*
doc
==
FTB_INC
)
{
param
->
plusminus
++
;
continue
;
}
else
case
FTB_DEC
:
param
->
plusminus
--
;
continue
;
if
(
*
doc
==
FTB_DEC
)
{
param
->
plusminus
--
;
continue
;
}
else
case
FTB_NEG
:
param
->
pmsign
=!
param
->
pmsign
;
continue
;
if
(
*
doc
==
FTB_NEG
)
{
param
->
pmsign
=!
param
->
pmsign
;
continue
;
}
default:
break
;
}
}
}
param
->
prev
=*
doc
;
param
->
prev
=*
doc
;
param
->
yesno
=
param
->
plusminus
=
param
->
pmsign
=
0
;
param
->
yesno
=
param
->
plusminus
=
param
->
pmsign
=
0
;
...
@@ -162,7 +160,7 @@ byte ft_get_word(byte **start, byte *end, FT_WORD *word, FTB_PARAM *param)
...
@@ -162,7 +160,7 @@ byte ft_get_word(byte **start, byte *end, FT_WORD *word, FTB_PARAM *param)
else
if
(
!
misc_word_char
(
*
doc
)
||
mwc
++
)
else
if
(
!
misc_word_char
(
*
doc
)
||
mwc
++
)
break
;
break
;
param
->
prev
=
'A'
;
/
/ be sure *prev is true_word_char
param
->
prev
=
'A'
;
/
* be sure *prev is true_word_char */
word
->
len
=
(
uint
)(
doc
-
word
->
pos
)
-
mwc
;
word
->
len
=
(
uint
)(
doc
-
word
->
pos
)
-
mwc
;
if
((
param
->
trunc
=
(
doc
<
end
&&
*
doc
==
FTB_TRUNC
)))
if
((
param
->
trunc
=
(
doc
<
end
&&
*
doc
==
FTB_TRUNC
)))
doc
++
;
doc
++
;
...
...
myisam/ft_static.c
View file @
59f3a958
...
@@ -21,6 +21,7 @@
...
@@ -21,6 +21,7 @@
ulong
ft_min_word_len
=
4
;
ulong
ft_min_word_len
=
4
;
ulong
ft_max_word_len
=
HA_FT_MAXLEN
;
ulong
ft_max_word_len
=
HA_FT_MAXLEN
;
ulong
ft_max_word_len_for_sort
=
20
;
ulong
ft_max_word_len_for_sort
=
20
;
char
*
ft_boolean_syntax
=
"+ -><()~*"
;
const
MI_KEYSEG
ft_keysegs
[
FT_SEGS
]
=
{
const
MI_KEYSEG
ft_keysegs
[
FT_SEGS
]
=
{
{
{
...
...
myisam/ftdefs.h
View file @
59f3a958
...
@@ -86,14 +86,15 @@ extern ulong collstat;
...
@@ -86,14 +86,15 @@ extern ulong collstat;
/*=================================================================*/
/*=================================================================*/
/* Boolean search operators */
/* Boolean search operators */
#define FTB_YES '+'
#define FTB_YES (ft_boolean_syntax[0])
#define FTB_NO '-'
#define FTB_EGAL (ft_boolean_syntax[1])
#define FTB_INC '>'
#define FTB_NO (ft_boolean_syntax[2])
#define FTB_DEC '<'
#define FTB_INC (ft_boolean_syntax[3])
#define FTB_LBR '('
#define FTB_DEC (ft_boolean_syntax[4])
#define FTB_RBR ')'
#define FTB_LBR (ft_boolean_syntax[5])
#define FTB_NEG '~'
#define FTB_RBR (ft_boolean_syntax[6])
#define FTB_TRUNC '*'
#define FTB_NEG (ft_boolean_syntax[7])
#define FTB_TRUNC (ft_boolean_syntax[8])
typedef
struct
st_ft_word
{
typedef
struct
st_ft_word
{
byte
*
pos
;
byte
*
pos
;
...
...
mysql-test/r/fulltext_var.result
View file @
59f3a958
...
@@ -3,3 +3,4 @@ Variable_name Value
...
@@ -3,3 +3,4 @@ Variable_name Value
ft_min_word_len 4
ft_min_word_len 4
ft_max_word_len 254
ft_max_word_len 254
ft_max_word_len_for_sort 20
ft_max_word_len_for_sort 20
ft_boolean_syntax + -><()~*
sql/mysqld.cc
View file @
59f3a958
...
@@ -1883,7 +1883,7 @@ The server will not act as a slave.");
...
@@ -1883,7 +1883,7 @@ The server will not act as a slave.");
if
(
opt_myisam_log
)
if
(
opt_myisam_log
)
(
void
)
mi_log
(
1
);
(
void
)
mi_log
(
1
);
ft_init_stopwords
(
ft_precompiled_stopwords
);
/* SerG */
ft_init_stopwords
(
ft_precompiled_stopwords
);
#ifdef __WIN__
#ifdef __WIN__
#define MYSQL_ERR_FILE "mysql.err"
#define MYSQL_ERR_FILE "mysql.err"
...
@@ -2986,6 +2986,7 @@ struct show_var_st init_vars[]= {
...
@@ -2986,6 +2986,7 @@ struct show_var_st init_vars[]= {
{
"ft_min_word_len"
,
(
char
*
)
&
ft_min_word_len
,
SHOW_LONG
},
{
"ft_min_word_len"
,
(
char
*
)
&
ft_min_word_len
,
SHOW_LONG
},
{
"ft_max_word_len"
,
(
char
*
)
&
ft_max_word_len
,
SHOW_LONG
},
{
"ft_max_word_len"
,
(
char
*
)
&
ft_max_word_len
,
SHOW_LONG
},
{
"ft_max_word_len_for_sort"
,(
char
*
)
&
ft_max_word_len_for_sort
,
SHOW_LONG
},
{
"ft_max_word_len_for_sort"
,(
char
*
)
&
ft_max_word_len_for_sort
,
SHOW_LONG
},
{
"ft_boolean_syntax"
,
ft_boolean_syntax
,
SHOW_CHAR
},
{
"have_bdb"
,
(
char
*
)
&
have_berkeley_db
,
SHOW_HAVE
},
{
"have_bdb"
,
(
char
*
)
&
have_berkeley_db
,
SHOW_HAVE
},
{
"have_innodb"
,
(
char
*
)
&
have_innodb
,
SHOW_HAVE
},
{
"have_innodb"
,
(
char
*
)
&
have_innodb
,
SHOW_HAVE
},
{
"have_isam"
,
(
char
*
)
&
have_isam
,
SHOW_HAVE
},
{
"have_isam"
,
(
char
*
)
&
have_isam
,
SHOW_HAVE
},
...
...
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