【问题标题】:MySQL Match FulltextMySQL 匹配全文
【发布时间】:2010-12-10 01:44:23
【问题描述】:

我正在尝试使用 mysql 进行全文搜索,以匹配字符串。问题是它首先返回了奇怪的结果。

例如,字符串'passat 2.0 tdi':

            AND MATCH (
            records_veiculos.titulo, records_veiculos.descricao
            )
            AGAINST (
             'passat 2.0 tdi' WITH QUERY EXPANSION
            )

将其作为第一个结果返回(其他都很好):

Volkswagen Passat Variant 1.9 TDI- ANO 2003

这是不正确的,因为本例中没有“2.0”。

可能是什么?

编辑:另外,由于这可能是一个大型数据库(预计最多 500.000 条记录),这种搜索方法是否最适合自己,或者安装任何其他搜索会更好像斯芬克斯这样的引擎?或者如果没有,如何显示相关结果?

edit2:作为记录,尽管问题被标记为已回答,但 MySQL 分隔符的问题仍然存在,因此如果有人对如何转义分隔符有任何建议,我们将不胜感激并值得500 点的风险。我发现增加结果集的解决方案是将 WITH QUERY EXPANSION 替换为 IN BOOLEAN MODE,使用运算符强制引擎获取我需要的单词,例如:

AND MATCH (
records_veiculos.titulo, records_veiculos.descricao
)
AGAINST (
 '+passat +2.0 +tdi' IN BOOLEAN MODE
)

它根本没有解决,但至少结果的相关性发生了显着变化。

【问题讨论】:

    标签: mysql match full-text-search


    【解决方案1】:

    来自MySQL documentation on Fulltext search

    “FULLTEXT 解析器通过查找某些分隔符来确定单词的开始和结束位置;例如,“”(空格)、“,”(逗号)和“。” (句号)。”

    这意味着句点将 2 和 0 分隔开。所以它不是在寻找“2.0”;它正在寻找“2”和“0”,但没有找到。 WITH QUERY EXPANSION 可能会导致相关的相关词出现,从而避免将“2”和“0”作为结果排名中的单个词。也可能会强制执行最低字符数。

    【讨论】:

    • 关于如何转义字符的任何建议?我尝试使用'\',但没有成功。
    【解决方案2】:

    默认情况下,我相信 mysql 只索引和匹配具有 4 个或更多字符的单词。您也可以尝试逃避期间?它可能会被忽略或以其他方式用作停止字符。

    【讨论】:

    • +1 想不通为什么这是反对票。非常真实。除非FULLTEXT 索引的服务器范围默认设置已更改,否则2.0 是否转义将被忽略。
    • @Yoda:在这里阅读,尤其是关于ft_max_word_lendev.mysql.com/doc/refman/5.1/en/fulltext-fine-tuning.html
    • 关于如何转义字符的任何建议?我尝试使用'\',但没有成功。
    • 看看:stackoverflow.com/questions/584976/… 这并没有提供最佳解决方案,但确实提供了一个。您也可以一起删除句点,但您必须在输入表格和搜索查询时都这样做。
    • 谢谢@methodin,帮我解决了很多问题:)
    【解决方案3】:

    它为此返回的匹配排名是多少?匹配是否必须包含所有“单词”我的理解是它像谷歌一样工作并且只需要匹配一些单词。

    话虽如此,请注意添加WITH QUERY EXPANSION 的效果,它会自动运行第二次搜索“相关”字词,这可能不是您输入的内容,但全文引擎认为可能相关。

    相关文档:http://dev.mysql.com/doc/refman/5.1/en/fulltext-query-expansion.html

    【讨论】:

    • 问自己同样的事情。固定的。愚蠢的人。
    【解决方案4】:

    “。”是您的查询结果中与 2003 年匹配的内容。

    如果你要搜索 3 个字符的文本字符串,你应该设置 ft_min_word_len=3 在你的mysql配置中,重启mysql。否则,搜索“tdi”将返回带有“TDI-”的结果,而不仅仅是“TDI”,因为带有“TDI-”的行将被编入索引,而单独的“TDI”则不会。

    进行配置更改后,您必须在该表上重建索引。 (警告:您的索引现在可能要大得多。)

    【讨论】:

    • 感谢您的意见,但大部分内容已经讨论过了,问题仍然存在。
    猜你喜欢
    • 2012-04-01
    • 1970-01-01
    • 2019-07-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多