自定义字段

时间:2016-09-22 13:33:09

标签: php full-text-search silverstripe

我正在使用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)
        ));
    }
}

当我尝试搜索说明字段中的某些字词时,未找到任何结果...建议?

2 个答案:

答案 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进行搜索。这不是一个完美的解决方案,但有效。