在数据库表中搜索大量关键字


Searching a Database Table For a Large List of Keywords

我正在尝试搜索多个关键字表。然而,我不是寻找一个关键字,甚至10。大概有一千个关键词。这些关键字也在一个表中,可以被控制。我宁愿不硬编码这些关键字到我的SQL命令…

我正在搜索的目标表包含大量文本,单元格可以包含整个句子或段落…所以在mySQL中做一些像"全文"搜索似乎是一个好的开始。

与这个问题非常相似,但是,当我说到多个关键字时,我指的是成百上千个。mysql FULLTEXT搜索多字

我可以转储我的关键字表到一个数组和运行FULLTEXT搜索?mySQL可以做到这一点吗?还是有我没有考虑到的限制?我也愿意接受其他技术建议。对不起,我没有代码或错误张贴。我首先试图从概念上理解如何处理这个问题。tia

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

另一个选择是sphinx,完整的教程可以在这里找到。

在这里查看相关文章。和这里。

SELECT * FROM articles WHERE body LIKE '%$keyword%';

你只需要在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++;     
             }      

i named your keywords column = "keywords".

你也可以很容易地在$query中添加其他条件

注意mysql全文搜索,如果你的结果集>整个数据集的50%,mysql认为这是一个失败的搜索,你不会得到任何东西。

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

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

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

为了获得最好的结果,你可能想要研究自然语言处理,从文章中提取意义,而不仅仅是从单词中提取意义。