2016-09-22 7 views
0

Я использую Silverstripe FullTextSearch. Мой опрос - это поиск в пользовательском поле и отображение результатов. Существует код записи в index.md:Silverstripe fulltextsearch on custom field

Файл: MySite/код/​​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/).

Если это вообще полезно, я написал модуль, который позволяет выполнять пользовательский поиск и отображение результатов в пользовательском контроллере. Это не так эффективно, как FullTextSearch, но работает очень хорошо (https://github.com/i-lateral/silverstripe-searchable).

Я попытался написать этот модуль с помощью FullTextSearch, но я просто не мог заставить его работать.

+0

Спасибо за ответ. Ваш метод поиска похож на частичное совпадение? «Что-то»? Если это так, его недостаточно для поиска сложных слов или ошибочных слов. Я уже сделал себе поисковый код, чтобы напрямую получать данные из базы данных с помощью% something℅, и я нашел, что этого недостаточно для моих сайтов. – StefGuev

+0

К сожалению, он использует частичное совпадение. Я предполагаю, что другим решением было бы изучить создание настраиваемого фильтра, который использует полный текстовый поиск, или вручную написать SQL с использованием класса SQLQuery (подробнее см. Https://docs.silverstripe.org/en/3.4/developer_guides/model/sql_query /) – PsychoMo

+0

Humm ok, Если бы я нашел решение, я опубликую его, чтобы попытаться помочь мне – StefGuev

0

Ну, я нашел решение. Модуль FullTextsearch всегда выполняет поиск в $ Title, $ MenuTitle и $ Content. Вместо использования $ Content для моего контента я использую переменную $ ContentPage. Все DataObjects и другие переменные должны быть добавлены, как показано ниже.

Пример:

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

В примере, все переменные и DataObject в странице поиска Повсеместно $ Содержание. Это не идеальное решение, но работает.