【问题标题】:How to create a search engine to search through mysql database [duplicate]如何创建搜索引擎来搜索mysql数据库[重复]
【发布时间】:2012-09-07 00:37:51
【问题描述】:

可能重复:
How do I create a PDO parameterized query with a LIKE statement in PHP?

目前我有一个非常简单的搜索引擎,它使用旧的 mysql_* 查询并在查询中使用“like”,我知道这现在已经过时了,并且随着数据库的增长,使用 like 查询会变慢?

我正在寻找一些关于如何使用 PDO 创建搜索引擎的想法,因为它提供的保护比我目前拥有的更多,我研究过在查询中使用 MATCH 和 AGAINST 来搜索“标题”和“描述” " 我的数据库中的列,但由于我是初学者,我不确定从哪里开始。

我一直在试图弄清楚如何实现搜索查询,并在用户输入多个关键字时让搜索正常工作

非常感谢任何帮助,我知道有人向我解释这可能是一个很大的要求,但我正在尽我所能学习,因为我是一名学生并正在做一个项目

感谢大家的帮助!

这是我当前代码的一部分,我希望将其更改并更新为更安全且具有更好搜索功能的内容:

$query = "SELECT * FROM people WHERE ";

foreach ($terms as $each){
$i++;

if ($i == 1)
    $query .= "lname LIKE '%$each%' ";
if($i == 1 && $_GET['category'] != '') {
    $query .= "AND category = '$chosencategory' ";
}
else
    $query .= "AND lname LIKE '%$each%' ";
if($_GET['price'] != '') {
    $query .= " ORDER BY price $price";
}
echo $query;
}

【问题讨论】:

  • 谢谢!我查看了代码,您知道使用 LIKE 语句对长期性能有什么影响吗?以及 PDO LIKE 语句对您的保护程度如何?
  • 如果我在进行搜索,我会使用触发器来索引表 (temp) 以更新和删除,在其上使用 myisam 并匹配比 LIKE 更强大的功能。
  • 有/没有 LIKE 的准备好的查询之间没有区别。它同样安全。只要您使用prepare() 就可以了。
  • 感谢大家的反馈非常有帮助! @wes 关于索引表和使用匹配/再次,你能给我一些关于如何实现这样的系统的起始点吗?

标签: php mysql database search pdo


【解决方案1】:

现在这是一个非常复杂的话题。因此,我只想为您指出几个起点。如果其他人能够在这里为这个极其复杂的话题制定一个很好的答案,我很乐意给他们一个支持..

  • 学说 1 有一个不错的“搜索引擎”。 [1](如果您还没有使用 ORM,我强烈建议您尝试一下。)
  • Lucene[2] 也值得一试。
  • 推出您自己的搜索引擎。我也曾经认为它与 MySQL 的一些特性或其他东西有关,但事实并非如此。这一切都是为了建立良好的索引并很好地使用它们。 (也就是说,自己构建它们。不仅仅是使用数据库索引。)如果你有时间,这实际上是一个非常有趣的话题。
  • 购买 John MacCormick 的改变未来的九种算法。[3]它有一个关于搜索引擎如何工作的精彩章节。

[1]http://docs.doctrine-project.org/projects/doctrine1/en/latest/en/manual/searching.html

[2]http://en.wikipedia.org/wiki/Lucene

[3]http://www.amazon.com/Nine-Algorithms-That-Changed-Future/dp/0691147140

【讨论】:

  • 别忘了sphinxsearch.com
  • 谢谢你这很有用,看来我有很多研究要做!您能解释一下索引及其工作原理吗?
  • 真的,真的很大的话题。但我敢打赌你会在网上找到很多关于它的东西(也许是谷歌“自定义 mysql 索引表”或其他东西)。但在它非常的基础上,它是关于创建一个双列表,在第一列中搜索单词,在第二列中搜索相应的匹配项(URL、ID、...)。
猜你喜欢
  • 2012-07-23
  • 1970-01-01
  • 2011-06-06
  • 2017-07-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-20
相关资源
最近更新 更多