【问题标题】:Searching a Database Table For a Large List of Keywords在数据库表中搜索大量关键字
【发布时间】:2014-09-02 17:59:01
【问题描述】:

我正在尝试在表格中搜索多个关键字。但是,我不是在寻找一个关键字,甚至不是 10 个。大约是一千个关键字。这些关键字也在一个表格中并且可以控制。我宁愿不要将这些关键字硬编码到我的 SQL 命令中...

我正在搜索的目标表包含大量文本,并且一个单元格可能包含整个句子或段落......因此在 mySQL 中执行类似“全文”搜索之类的操作似乎是一个好的开始。

与这个问题非常相似,但同样,当我谈到多个关键字时,我的意思是成百上千。 mysql FULLTEXT search multiple words

我可以将关键字表转储到数组中并运行 FULLTEXT 搜索吗?这甚至可以用 mySQL 来解决,还是我没有考虑到限制?我也愿意接受其他技术建议。抱歉,我没有要发布的代码或错误。我首先试图从概念上理解如何解决这个问题。 -tia

【问题讨论】:

    标签: php mysql sql search elasticsearch


    【解决方案1】:

    注意 mysql 全文搜索,如果您的结果集占整个数据集的 50% 以上,mysql 会认为这是一次失败的搜索,您将一无所获。

    如果您有一个包含 1000 多个可能单词的命中列表,这听起来很可能发生。

    我想说你最好调查一下从文本中提取关键词(假设它们是文章),因为它们是存储的。

    然后将这些关键字存储在自己的表中。

    不过,为了获得最佳结果,您可能希望研究自然语言处理并从文章中提取含义而不仅仅是单词。

    【讨论】:

      【解决方案2】:

      你只需要在你的mysql查询中使用一个for循环来读取所有的keyworks。

      很明显,您用逗号分隔关键字或 -

      所以你需要用逗号分解关键字并将它们放在一个变量中。

      例如:

        $keywords =  "key1,key2,key3,...";  // values come from keywords column from db.
      

      现在你只需要分解 $keywords。

        $keys=explode(',',$keywords);
      

      最后在您的查询中,您需要使用 for 循环:

        $query = "SELECT * From targettable";
                  $i = 0;
                  foreach ($keys as $key)
                   {
                  $query .= "WHERE keywords LIKE '%".$key."%' )";
                  $i++;     
                   }      
      

      我将您的关键字列命名为 =“关键字”。

      您也可以轻松地将其他条件添加到 $query 中。

      【讨论】:

      • 谢谢!您认为从长远来看,这在性能和可扩展性方面是否可行? (大约两千个关键词)我今天就开始测试,看看效果如何。
      • 有没有比将我的所有关键字硬编码到查询中更好的方法来解决这个问题?我们将在表格中慢慢添加关键字。
      • 如果您的表使用 MyISAM,您可以使用 FULLTEXT 进行查询,但我不确定性能。只需检查一次:[链接](www.websanova.com/blog/mysql/mysql-full-text-search#.U8Ivlaitv-Z)
      【解决方案3】:

      SELECT * FROM 文章 WHERE body LIKE '%$keyword%';

      【讨论】:

      • 和 %$keyword% 可以是整个值表吗?或者至少是一整列?请解释。很抱歉缺乏理解。
      【解决方案4】:

      最近我不得不做一个类似的决定。我决定使用 lucene。我将可索引字段存储在 lucene 中,并为 mysql 行返回一个 id。

      其他选择是 sphinx ,完整教程可以在here找到。

      查看相关帖子here。还有here

      【讨论】:

      • 感谢您的提示。我会阅读这个,但乍一看,我在这些帖子中没有看到搜索存储在表中的多个关键字的参考。尽管这些链接似乎解决了缩放问题,但其中大部分仍然是关于搜索单个关键字/短语/字符串。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-03-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多