2016-03-14 62 views
0

如何正確的文件添加到搜索索引...Silverstripe Solr的搜索文件,網頁和數據對象

使用自定義索引我可以成功地搜索網頁和數據對象,但是當我試圖以包括文件這個索引,頁面從結果集中刪除,我只返回文件和數據對象。

這將按預期返回頁面和數據對象。

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();現在只適用於文件嗎?

回答

0

我有一個類似的(但稍有不同)的問題,包括Solr索引中的頁面和文件,但我找出發生的事情的方式可能會有所幫助。

問題是我們希望文件有一個抽象文本字段,用戶可以在其中輸入文件的簡短說明,但常見Web平臺(CWP)頁面上有一個抽象字段,因此Solr編入索引比文件上的抽象字段。

對於您面臨的問題,您是否嘗試登錄到Solr服務器並瀏覽架構以查看Solr實際上包含在索引中的字段?

如果運行Solr的本地(使用silverstripe/fulltextsearch-localsolr模塊),你應該能夠訪問此服務器http://localhost:8983/solr

一旦Solr的服務器web界面,嘗試做以下...

  • 從下拉式索引在左邊的菜單底部
  • 在右窗格中
  • 點擊架構瀏覽器,點擊「請選擇..」下拉頂部和檢查,看看是否索引中的字段與預期的一樣。

如果幸運的話,你可能會看到Solr選擇了錯誤地編制索引(可能比較索引字段中是否包含索引中的文件),這將爲您提供有關如何解決此問題的線索。

在那個筆記我認爲它可能更好不使用$ this-> addAllFulltextFields();因爲這將所有內容都吸引到索引中。我會指定哪些字段是必需的。在頁面的情況下,通常標題,摘要,內容都是真正需要的。

另一個提示給你;我發現如果文件的IncludeSubclasses設置爲true,那麼搜索結果將包括資產目錄中的文件夾以及圖像。在我們的例子中,我們只需要文檔,將IncludeSublcasses設置爲false,以排除文件排除圖像和文件夾。

如果你碰巧做到了或者確實解決了這個問題,如果你可以發佈原因和解決方案是很好的。

乾杯, DouG。