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
但是,似乎小提琴使用默认的停用词文件,因此使用"非"字测试它不起作用.
第 1 行没有返回的原因是消极操作(如排除)超过了积极操作(如包含)。例如,这是安全领域的常见做法,其中DENIED
权限优先于ALLOW
权限GRANT
操作。
从 MySQL 12.9.2 开始。布尔全文搜索:
\n\n\n\n\n注意: - 运算符仅用于排除与其他搜索词匹配的行。因此,仅包含以 - 开头的术语的布尔模式搜索将返回空结果。它不返回 \xe2\x80\x9call 行,但包含任何排除项的行除外。\xe2\x80\x9d
\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
更新2
\n\n我会坚持上面的解释。虽然这不是你所期望的。它看起来像带有减号的双引号,如 in-"term1 term2"
被解释为()
- 括号,而不是双引号。
尽管我希望看到类似2011-12 Fleer Retro auto jordan non
和 的行,但该查询什么也不返回1999 jordan non auto
。它与停用词无关。
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