PHP搜索标题和标签

时间:2009-09-13 05:36:57

标签: php search full-text-search tags

问候, 我正在考虑在我的网站上实施搜索的最佳方式。我知道Sphinx和MySQL的全文搜索,但我不只是搜索单个字段。

我想要搜索两件事:文章标题和与该文章相关的标签。

我想要做的是在我的文章表中定义另一列,其中包含标题中的关键字,以及附加到此字符串末尾的每个标记。

例如,如果文章标题是“如何建立家庭影院”,并且标签为“DIY”,“技术”这个领域将是“建立家庭影院DIY技术”。然后我可以在这个领域进行搜索。

我看到这种方法的唯一缺点是,如果标签已更新,我将不得不更新此字段,这可能导致此字段不准确或过时。

有更好的方法吗?

4 个答案:

答案 0 :(得分:1)

Sphinx可以根据多个列进行搜索。它甚至允许为每列定义“重量”。我认为你应该坚持下去。

答案 1 :(得分:0)

您可以在MyISAM中对MySQL的表的多个列进行全文搜索。

请参阅:

$search = 'how to do short circuit evaluation?';
$q = 'SELECT * FROM `table` WHERE MATCH(tags, title, description) AGAINST ('.mysql_real_escape_string($search).' IN BOOLEAN MODE)';
$r = mysql_query($q);
//.. so on

做另一个表需要不断的同步,这对你的系统来说非常繁琐。

由于您的代码处于多对多关系中,因此您可以获取它们并将其合并到查询中

$q = 'SELECT * FROM `table` WHERE'.
  ' MATCH(tags, title, '.
  '(SELECT  GROUP_CONCAT(`tag`) FROM `tags`'.
  'WHERE `ArticleID`='.(int)$ArticleID.')'.
  ') AGAINST ('.mysql_real_escape_string($search).' IN BOOLEAN MODE)';

答案 2 :(得分:0)

在Sphinx中使用多值属性作为标记:

  

MVAs或多值属性是Sphinx中一种重要的特殊类型的每文档属性。 MVA可以将值列表附加到每个文档。它们对文章标签,产品类别等非常有用。支持对MVA属性进行过滤和分组(但不是排序)。

http://www.sphinxsearch.com/docs/current.html#mva

答案 3 :(得分:0)

Sphinx,Lucene以及几乎所有的全文搜索不仅限于单个字段。实际上,默认设置是搜索所有字段,然后过滤指定的字段。我认为内部MySQL搜索不是很好,Sphinx和Lucene插件要好得多。