Content management system Silverstripe FulltextSearchable可添加自定义字段

Content management system Silverstripe FulltextSearchable可添加自定义字段,content-management-system,silverstripe,Content Management System,Silverstripe,我需要一个自定义字段来进行FulltextSearchable。因此,我尝试了FulltextSearchable类中描述的代码: Object::add_extension('Page', "FulltextSearchable('SearchableContent')"); 然后运行dev/build。 基本上,全文搜索似乎是可行的。但自定义字段“SearchableContent”的内容似乎从未被检查过 当然,我首先通过以下方式启用了FulltextSearch: FulltextSea

我需要一个自定义字段来进行FulltextSearchable。因此,我尝试了FulltextSearchable类中描述的代码:

Object::add_extension('Page', "FulltextSearchable('SearchableContent')");
然后运行dev/build。 基本上,全文搜索似乎是可行的。但自定义字段“SearchableContent”的内容似乎从未被检查过

当然,我首先通过以下方式启用了FulltextSearch:

FulltextSearchable::enable();
Thx,
Florian

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

$defaultColumns = array(
  'SiteTree' => '"Title","MenuTitle","Content","MetaTitle","MetaDescription","MetaKeywords"',
  'File' => '"Title","Filename","Content"'
);
所以我不认为SilverStripe会在你的额外专栏中占据一席之地。除非您编辑
FulltextSearchable
,但这可能是个坏主意。。。或者只需创建一个自定义搜索函数,如普通
DataObject
,这样您就可以准确地指定要搜索的列:

谢谢。我试图直接编辑FulltextSearchable。但这也没有任何效果:
$defaultColumns=array('SiteTree'=>'标题、菜单项、内容、元标题、元描述、元关键字、可搜索内容','File'=>'文件名、标题、内容')我后来做了开发/构建。”“SearchableContent”仍然被忽略……这就是默认的
FulltextSearchable
的问题,如果不是所有内容都是硬编码的,并且是专门为
文件和
站点树设计的,那么很多内容都是这样的。如果我是对的,
FulltextSearchable
只更新用于创建DB表和索引的引擎。因此,在仔细研究之后,您必须修改
MySQLDatabase
class@line 818(由
ContentController
扩展名调用)中的
searchEngine
函数。但同样,这是一项有风险的业务,在更新SilverStripe时,您可能会失去所有这些。最好、最简单和最安全的方法是覆盖控制器中的
results
函数,并在您自己的查询中写入。您的意思是在此处添加额外字段:
$match['SiteTree']=“match(Title、menutile、Content、MetaTitle、MetaDescription、MetaKeywords)与('keywords'$boolean)+match(Title、menutile、Content、MetaTitle、MetaDescription、MetaKeywords)与(“$htmlEntityKeywords'$boolean)
查询在SiteTree\u Live表上运行。因此,向该行添加值会导致错误(在where子句中找不到值…)。但是我添加的自定义字段在页面表中找到。很抱歉,它实际上会引发一个错误,因为您的额外列位于
Page
表中,并且搜索是在
SiteTree
表上完成的。无论如何,最好不要使用这些文件。但是您可以使用以下要点:,将函数粘贴到
Page\u控制器中ss,这将覆盖默认搜索功能,并添加数据对象和自定义页面列(您必须编辑其中的一些以匹配您的设置)。然后在模板中,您可以通过
$Pages
$News
$Files
访问结果。此答案应该可以帮助您: