搜索数据库表以获取大量关键字

时间:2014-07-12 02:34:57

标签: php mysql sql search elasticsearch

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

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

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

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

4 个答案:

答案 0 :(得分:0)

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

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

查看相关帖子here。并here

答案 1 :(得分:0)

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

答案 2 :(得分:0)

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

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

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

答案 3 :(得分:0)

如果您的结果集是>请注意mysql全文搜索。整个数据集的50%,mysql认为这是一个失败的搜索,你什么都得不到。

如果您有1000个可能的单词的命中列表,则可能会发生这种情况。

我会说你最好调查一下文本中关键词的提取(让我们想象它们就是文章)。

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

为了获得最佳效果,您可能希望调查自然语言处理并从文章而不仅仅是单词中提取意义。