2016-09-22 3 views
0

실버 스트라이프 FullTextSearch을 사용하고 있습니다. 내 심문은 맞춤 필드에서 검색하고 결과를 표시하는 방법입니다.사용자 정의 필드의 실버 스트라이프 전체 텍스트 검색

파일 : index.md 코드 쓰기가 내 사이트/코드/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) 
     )); 
    } 
} 

내가 어떤 단어를 검색하기 위해 노력하고있어 설명 필드에서 결과가 없습니다 ... 제안?

답변

1

제 경험상 FullTextSearch는 실망스럽고 문제가 있습니다. 기꺼이 수정 하겠지만 SearchFilters (https://docs.silverstripe.org/en/3.1/developer_guides/model/searchfilters/)를 사용하는 대신 devs가 멀어지는 것처럼 느껴집니다.

전혀 도움이된다면 맞춤 검색을하고 맞춤 컨트롤러에 결과를 표시 할 수있는 모듈을 작성했습니다. FullTextSearch만큼 효율적이지는 않지만 잘 작동합니다 (https://github.com/i-lateral/silverstripe-searchable).

원래 FullTextSearch를 사용하여이 모듈을 작성하려고했지만 그 모듈을 작동시키지 못했습니다.

+0

답장을 보내 주셔서 감사합니다. 검색 방법이 부분 일치와 비슷합니까? ℅ 뭔가? 그렇다면 복잡한 단어 나 오류가있는 단어를 검색 할만큼 충분하지 않습니다. 나는 이미 % something with과 함께 데이터베이스에서 직접 데이터를 가져 오기위한 검색 코드를 만들었고 사이트가 충분하지 않음을 알았습니다. – StefGuev

+0

불행히도 부분 일치를 사용합니다. 다른 해결책은 전체 텍스트 검색을 사용하는 사용자 정의 필터를 작성하거나 SQLQuery 클래스를 사용하여 SQL을 수동으로 작성하는 것입니다 (자세한 내용은 https://docs.silverstripe.org/en/3.4/developer_guides/model/sql_query를 참조하십시오). /) – PsychoMo

+0

Humm ok, 해결책을 찾았다면, 도와 주려고 감사합니다. – StefGuev

0

음, 해결책을 찾았습니다. FullTextsearch 모듈은 항상 $ Title, $ MenuTitle 및 $ Content에서 검색합니다. 내 콘텐츠에 $ Content를 사용하는 대신 $ ContentPage 변수를 사용합니다. 모든 DataObject 및 기타 변수는 다음과 같이 추가해야합니다.

예 :

$this->Content = $this->ContentPage." ".$this->Variable1." ".$this->Variable2." ".$dataobject; 
예에서

, 모든 변수와 페이지의 데이터 객체는 검색 축복하는의 $ 내용입니다. 완벽한 솔루션은 아니지만 작동합니다.