【问题标题】:Silverstripe FulltextSearchable add custom fieldsSilverstripe FulltextSearchable 添加自定义字段
【发布时间】:2013-01-27 16:11:12
【问题描述】:

我需要一个自定义字段才能全文搜索。因此,我按照 FulltextSearchable 类中的描述尝试了这段代码:

Object::add_extension('Page', "FulltextSearchable('SearchableContent')");

然后运行开发/构建。 基本上全文搜索似乎工作。但是自定义字段“SearchableContent”的内容似乎从未被检查过。

当然,我首先通过以下方式启用了全文搜索:

FulltextSearchable::enable();

谢谢, 弗洛里安

【问题讨论】:

标签: content-management-system silverstripe


【解决方案1】:

所有SiteTree 类的搜索列都在FulltextSearchable 中定义,例如:

$defaultColumns = array(
  'SiteTree' => '"Title","MenuTitle","Content","MetaTitle","MetaDescription","MetaKeywords"',
  'File' => '"Title","Filename","Content"'
);

所以我认为 SilverStripe 不会在您的额外专栏上有所收获。除非您编辑 FulltextSearchable 但这可能是个坏主意...或者只是创建一个自定义搜索功能,例如普通的 DataObject,这样您就可以准确指定要搜索的列: silverstripe dataobject searchable

【讨论】:

  • 谢谢。我尝试直接编辑 FulltextSearchable。但这也没有效果:$defaultColumns = array( 'SiteTree' => 'Title,MenuTitle,Content,MetaTitle,MetaDescription,MetaKeywords,SearchableContent', 'File' => 'Filename,Title,Content' ); 之后我进行了开发/构建。 'SearchableContent' 仍然被忽略...
  • 这就是默认FulltextSearchable 的问题,如果不是全部的话,很多都是硬编码的,并且是专门为FileSiteTree 设计的。如果是对的,FulltextSearchable 只会更新用于创建数据库表的引擎和索引。
  • 因此,经过一番调查,您将不得不修改MySQLDatabase 类@ 行818 中的searchEngine 函数(由ContentController 扩展调用)。但这又是冒险的事情,在更新 SilverStripe 时您会失去所有这些。最好、最简单和最安全的方法是覆盖控制器中的 results 函数并写入您自己的查询。
  • 您的意思是在此处添加额外字段:$match['SiteTree'] = " MATCH (Title, MenuTitle, Content, MetaTitle, MetaDescription, MetaKeywords) AGAINST ('$keywords' $boolean) + MATCH (Title, MenuTitle, Content, MetaTitle, MetaDescription, MetaKeywords) AGAINST ('$htmlEntityKeywords' $boolean) 查询在 SiteTree_Live 表上运行。因此向该行添加值会导致错误(在 where 子句中找不到值...)。但是我添加的自定义字段是在 Page 表中找到的。
  • 对不起,它实际上会抛出一个错误,因为您的额外列在 Page 表中,并且搜索是在 SiteTree 表中完成的。无论如何,最好不要管这些文件。但是您可以使用此要点:gist.github.com/4657819,将函数粘贴到您的 Page_Controller 类中,这将覆盖默认搜索函数并添加 DataObjects 和自定义页面列(您必须编辑其中一些以匹配您的设置)。然后在您的模板中,您将可以通过$Pages$News$Files...访问结果...
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多