gpt4 book ai didi

mysql - 使用建议单词而不是结果的 MySQL 全文搜索自动完成

转载 作者:行者123 更新时间:2023-11-29 07:24:27 25 4
gpt4 key购买 nike

关于使用 mySQL 进行全文搜索有很多问题,我已经阅读了很多但没有找到我正在寻找的内容(在 google 或 stackoverflow 中)。

我不希望匹配行(或文档),但我希望匹配行中包含的单词。

例如,假设您有一个公司表,其中包含一个 ID、一个名称和一个 small_description 列。你可以找到像这样的行:

1 | MyBaker | fine bakery since 1920
2 | Bakery factory | all the materials for a bakery
etc...

现在,当用户输入“bak”时,我想向他推荐“bakery”这个词(我不想直接向他推荐 MyBaker 和 Bakery factory,因为有数百家公司可以匹配但只有一个几个不同的词)

我认为底层的 mySQL 全文引擎已经有了某种“单词查找”,所以我想使用它而不是自己解析名称和 small_description 来重新创建另一个表词 | nb_occurences

(更不用说如果在另一个表中进行大量更新以减少计数器可能很难保持同步:( )

这背后的原因是创建一个自动完成搜索其中单词建议将与数据库内容相关

例如,亚马逊 (.fr) 做得非常糟糕。如果您键入“tel”,它会建议一打“电话”匹配项和 0 个“电视”或“望远镜”或“遥测”...!

虽然在桌面上这不是真正的问题,因为在桌面上输入完整的单词很快,但对于移动设备来说这确实是个问题

智能手机键盘建议的一些词不在我的数据库中,而且我的数据库中的一些词从来没有被智能手机键盘建议过,这一事实放大了这一点。

例如,我的数据库有 0 个电话和电视,但有很多遥测和电话 session

最后,如果可能的话,我还想原谅错误的拼写(例如:telme 应该匹配 telemetry)

我希望有人能帮助我利用现有的全文索引来实现我的目标

最佳答案

FULLTEXT 搜索查找与您提供给它的一个或多个单词相匹配的数据行。如您所知,这不仅仅是一个单词搜索。

您可以在后端程序中获取全文搜索的结果,将其分解为单词,并考虑自动完成这些单词中出现频率最高的单词。如果您使用 WITH QUERY EXPANSION 修改搜索,这可能会很有效.

(请记住,自然语言 FULLTEXT 搜索对于要搜索的小数据集工作起来很奇怪,因此请使用包含很多行的表进行测试,而不仅仅是几行。)

但是,FULLTEXT 不能正确处理词干提取(chateau + chateaux - chat),也不能纠正拼写错误。

您可以将 Apache Lucene 用于您的目的,但它是一个庞大而复杂的系统。

我认为您需要 word/nb_appearances 表,因为维护起来很不愉快。它会给你做的能力

    SELECT word 
FROM words
WHERE word LIKE CONCAT(:input,'%')
ORDER BY nb_appearances DESC;

获取部分单词匹配。 FULLTEXT 不能那样做。您还可以添加第二个查找表来更正应用程序域中的常见拼写错误,例如,遥测 --> 遥测。当然是脖子痛。

关于mysql - 使用建议单词而不是结果的 MySQL 全文搜索自动完成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54589901/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com