如何正确地将文件添加到搜索索引...
使用自定义索引,我可以成功搜索页面和数据对象,但是一旦我尝试在此索引中包含文件,页面就会从结果集中消失,我只会返回文件和数据对象。
这将按预期返回页面和数据对象。
class EntrySearchIndex extends SolrSearchIndex
{
public function init()
{
$this->addClass('SiteTree');
$this->addClass('EntryAccordionItem');
$this->addClass('EntryInformationBoxItem');
$this->addClass('EntryTabItem');
$this->addAllFulltextFields();
$this->addFilterField('ShowInSearch');
$this->excludeVariantState(array('SearchVariantVersioned' => 'Stage'));
}
}
和一个基本的工作搜索功能
public static function keywordSearch($keywords)
{
$keywords = Convert::raw2sql(trim($keywords));
$classes[] = array('class' => 'EntryPage', 'includeSubclasses' => true);
$classes[] = array('class' => 'EntryAccordionItem');
$classes[] = array('class' => 'EntryInformationBoxItem');
$classes[] = array('class' => 'EntryTabItem');
$index = singleton('EntrySearchIndex');
$engine = SearchQuery::create();
return $engine->search($keywords, $classes, $index, -1, 0)->getResults();
}
进行以下小修改以允许文件(为简洁起见仅显示更改)
public function init()
{
$this->addClass('SiteTree');
$this->addClass('EntryAccordionItem');
$this->addClass('EntryInformationBoxItem');
$this->addClass('EntryTabItem');
// File specific
$this->addClass('File');
$this->addFulltextField('FileContent');
$this->addAllFulltextFields();
$this->addFilterField('ShowInSearch');
$this->excludeVariantState(array('SearchVariantVersioned' => 'Stage'));
}
public static function keywordSearch($keywords)
{
[...]
// File specific
$classes[] = array('class' => 'File', 'includeSubclasses' => true);
[...]
return $engine->search($keywords, $classes, $index, -1, 0)->getResults();
}
仅返回文件和数据对象。我的想法$this->addAllFulltextFields();
是否正确现在只应用于文件?