我正在使用Silverstripe FullTextSearch。我的询问是如何在自定义字段中搜索并显示结果。在index.md中有代码写入:
文件:mysite / code / MyIndex.php:
<?php
class MyIndex extends SolrIndex {
function init() {
$this->addClass('MyPage');
$this->addFulltextField('Description');
}
}
在Page.php中
class Page_Controller extends ContentController {
private static $allowed_actions = array('search');
public function search($request) {
$query = new SearchQuery();
$query->search($request->getVar('q'));
return $this->renderWith('array(
'SearchResult' => singleton('MyIndex')->search($query)
));
}
}
当我尝试搜索说明字段中的某些字词时,未找到任何结果...建议?
答案 0 :(得分:1)
根据我的经验,FullTextSearch令人沮丧且有问题。我愿意得到纠正,但我觉得开发人员正在远离它而不是使用SearchFilters(https://docs.silverstripe.org/en/3.1/developer_guides/model/searchfilters/)。
如果它有用,我写了一个模块,允许自定义搜索并在自定义控制器中显示结果。它不如FullTextSearch效率高,但效果很好(https://github.com/i-lateral/silverstripe-searchable)。
我最初尝试使用FullTextSearch编写此模块,但我无法使其正常工作。
答案 1 :(得分:0)
好吧,我找到了解决方案。 FullTextsearch模块总是在$ Title,$ MenuTitle和$ Content中搜索。我没有使用$ Content作为我的内容,而是使用$ ContentPage变量。必须添加所有DataObjects和其他变量,如下所示。
示例:
$this->Content = $this->ContentPage." ".$this->Variable1." ".$this->Variable2." ".$dataobject;
在该示例中,页面中的所有变量和数据对象都可以通过$ Content进行搜索。这不是一个完美的解决方案,但有效。