在全文布尔模式下对多个单词使用减号

Bre*_*ett 5 mysql full-text-search booleanquery

我只是用mysql做了一堆测试,full text boolean mode从我的测试来看,似乎你不能在多个单词上使用减号?

我有两行例如..

id,name
1,2011-12 Fleer Retro auto jordan non
2,1999 jordan non auto
Run Code Online (Sandbox Code Playgroud)

如果我运行以下查询:

SELECT auction_id,`name`,description FROM auctions WHERE MATCH(`name`) AGAINST('+jordan +auto -non' IN BOOLEAN MODE);
Run Code Online (Sandbox Code Playgroud)

两行都没有按预期显示.但是,如果我运行此查询:

SELECT auction_id,`name`,description FROM auctions WHERE MATCH(`name`) AGAINST('+jordan +auto -"non auto"' IN BOOLEAN MODE);
Run Code Online (Sandbox Code Playgroud)

两行都不显示(相同的结果).不应该排1回来吗?

编辑:ft_min_word_len的设置为2,我已禁用我的停用词文件,因此它与此无关.

小提琴:http://sqlfiddle.com/#!2/d1987/4

但是,似乎小提琴使用默认的停用词文件,因此使用"非"字测试它不起作用.

Sto*_*leg 0

第 1 行没有返回的原因是消极操作(如排除)超过了积极操作(如包含)。例如,这是安全领域的常见做法,其中DENIED权限优先于ALLOW权限GRANT操作。

\n\n

从 MySQL 12.9.2 开始。布尔全文搜索

\n\n
\n

注意: - 运算符仅用于排除与其他搜索词匹配的行。因此,仅包含以 - 开头的术语的布尔模式搜索将返回空结果。它不返回 \xe2\x80\x9call 行,但包含任何排除项的行除外。\xe2\x80\x9d

\n
\n\n

因此任何查询如:

\n\n
 ... AGAINST(\'+Any_string -"any_string"\' IN BOOLEAN MODE)\n
Run Code Online (Sandbox Code Playgroud)\n\n

不会产生任何结果。

\n\n

更新

\n\n

-"non auto"阻止“auto”出现在搜索结果中,因为它non是一个停用词并且被排除在搜索字符串之外。该词被排除在搜索之外的另一个原因BOOLEAN MODE是它太短:

\n\n
\n

如果该短语不包含索引中的单词,则结果为空。例如,如果所有单词都是停用词或短于索引单词的最小长度,则结果为空。

\n
\n\n

更新2

\n\n

我会坚持上面的解释。虽然这不是你所期望的。它看起来像带有减号的双引号,如 in-"term1 term2"被解释为()- 括号,而不是双引号。

\n\n

尽管我希望看到类似2011-12 Fleer Retro auto jordan non和 的行,但该查询什么也不返回1999 jordan non auto。它与停用词无关。

\n\n
SELECT auction_id,`name` FROM auctions \nWHERE MATCH(`name`) AGAINST(\'+jordan +auto -"jordan auto"\' IN BOOLEAN MODE);\n
Run Code Online (Sandbox Code Playgroud)\n\n

还有一个相关的错误#36384:需要全文(+)运算符错误。它支持我的假设,即全文搜索表达式的解析可能无法按预期工作。

\n