MYSQL全文搜索如何使用特殊字符,包括使用自然语言匹配谓词



我一直在努力修复一些bug,我已经收到了一个文章搜索,但我得到奇怪的行为取决于查询我搜索,我一直在尝试修复像包装查询",用空格替换特殊字符或分割文本由空格/闭引号,括号,但它还没有太有用。

我看了很多页面/文档,还没有完全理解这个搜索是如何工作的。下面是关于这个问题的更多上下文:

此文章搜索对标题和内容使用自然语言匹配谓词。内容和标题都可以包含特殊字符,数字,ip甚至url,所以,期望的是这个搜索可以返回最准确的结果/确切的结果,但这并不是一直发生,它取决于用户如何输入文本。

一个例子:

如果我搜索整个文章的标题,例如:Guess who's back - tl;dr: Emot在结果的顶部,我得到与标题匹配的文章,但我也得到其他结果,似乎包含我输入的文本中的任何单词。

但是如果我搜索前面示例的片段:tl;dr:我没有得到任何结果,任何关于为什么会发生这种情况的想法?在执行搜索时,是否有MYSQL文本搜索应用的内部配置?

值得一提的是,我不知道表/索引是如何配置的,我没有访问那种信息,我只是想了解MYSQL是如何工作的,以便能够告诉我的经理,他和客户期望的一些行为将或不可能取决于他们正在搜索的内容。

对于任何可以帮助我的人,提前感谢。

起点是mysql关于自然语言全文搜索的文档。文档非常全面。

  1. 标题匹配并获得多个结果:

全文引擎将短语分割成单词,并在FULLTEXT索引中为这些单词执行搜索。非单词字符不需要精确匹配:短语搜索只要求匹配包含与短语完全相同的单词,并且顺序相同。例如,"测试短语"匹配"test,短语"

  1. tl;dr上搜索而没有得到结果在两个不同的地方解释,第一个描述了全文搜索考虑的单词,第二个描述了索引太短的单词的进一步限制:

MySQL FULLTEXT实现将任何真实的单词字符(字母、数字和下划线)序列视为一个单词。该序列还可以包含撇号('),但每行不能超过一个。这意味着aaa'bbb被视为一个单词,但aaa'bbb被视为两个单词。FULLTEXT解析器会去掉单词开头或结尾的撇号;'aaa'bbb'将被解析为aaa'bbb。内置的FULLTEXT解析器通过查找特定的分隔符来确定单词的开始和结束位置;例如:(空格),(逗号),和。(时期)。

任何太短的单词都会被忽略。对于InnoDB搜索索引,默认最小长度为3个字符,对于MyISAM搜索索引,默认最小长度为4个字符。

根据你向我描述的,你似乎在寻找更像精确的子字符串匹配(像操作符),而不是全文搜索。

最新更新