gpt4 book ai didi

MySQL 以任何或特定顺序(多种可能性)搜索单词 - 最佳方法?

转载 作者:搜寻专家 更新时间:2023-10-30 23:30:42 25 4
gpt4 key购买 nike

我有一个 MySQL 数据库,其中包含一列和许多已填充的行与句子。我想进行一个需要用户输入的搜索(可以是 1 个或多个用空格分隔的单词)来查找句子其中包含特定顺序的单词,如下所示:

用户输入: Word1 Word2

搜索选项:

  1. 以任意顺序查找包含这 2 个词的句子地点
  2. 首先找到包含 Word1 的句子,然后Word2 在任何地方,但不只是在 Word1 之后(至少 1 个字之间)
  3. 首先找到包含 Word1 的句子,然后Word2 紧随其后。
  4. 在任何地方(不是第一个)找到包含 Word1 的句子,并且Word2 在任何地方,但不只是在 Word1 之后(至少 1 个字之间)
  5. 在任何地方(不是第一个)找到包含 Word1 的句子,并且Word2 紧随其后。

此外,使用此规则可以搜索超过 2 个词结合起来寻找特定的模式。

在一个网站上,当用户使用时,我看到了类似搜索的解决方案搜索字段中的特殊标志以查找他们想要的模式。例如:X + Y(一个词紧接着另一个词),X - Y(一个词其次是其他的,立即或一些单词between), X Y(任意顺序的单词)...

有什么解决这个问题的建议吗?我读了很多关于 Regex 的文章或全文搜索,但我不知道从哪里开始,什么是最佳解决方案。什么是最好的和快速的搜索这种问题?

提前致谢!

最佳答案

  • 有一个FULLTEXT列上的索引。
  • 构造 MATCH(col) AGAINST('+word1 +word2' IN BOOLEAN MODE)作为初级过滤器。
  • 构造 AND col RLIKE ...或其他事情 - 当您有更多限制时。

逻辑是这样的:

  • 何时MATCHWHERE 的一部分子句,它将首先运行,因为它非常有效。
  • +AGAINST表示必填词。
  • 这将筛选出几行,即包含所有这些词的行。
  • 那么其他子句(运行起来会很昂贵)的成本不会太高,因为它们只会命中几行。

    1. (任何地方的单词)不需要额外的条款。
    2. (有序但不相邻):col RLIKE '[[:<:]]word1[[:>:]].*[[:alpha:]].*[[:<:]]word2[[:>:]]'
    3. (开始,相邻,按一定顺序:col RLIKE '^word1[[:>:]] [[:<:]]word2[[:>:]]'(假设单词之间有一个空格)
    4. (不明确;排序不明确)-- 是其他两种情况的组合。
    5. (相邻,按一定顺序:col RLIKE '[[:<:]]word1 word2[[:>:]]'(假定单词之间有一个空格)

正则表达式注释:

  • [[:<:]]表示单词的开头
  • ^ (当第一个时)表示字符串的开始
  • .*[[:alpha:]].*匹配任何至少有一个字母的字符串

关于MySQL 以任何或特定顺序(多种可能性)搜索单词 - 最佳方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49471519/

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