Плагины умного поиска собрали вместе для удобства в плагин группу под названием «finder». Посмотрите в каталоге plugins/finder  и вы увидите плагины, которые поддерживают основные типы контента Joomla. Лучше создать свой собственный плагин, принимая копию одного из этих подключаемых модулей и адаптируя его для удовлетворения ваших конкретных потребностей.

Все плагины Разумного Поиска расширяют класс Finderindexeradapter, который содержит весьма много методов, для поддержания индекса. Для  большинства случаев вам только нужно будет переопределить несколько из этих методов.

Есть дополнительная информация по написанию  плагина умного поиска здесь.

    1. Основные свойства

      Прежде чем смотреть на методы, есть несколько свойств, которые должны быть настроены:

      • $context
        Это должно быть уникальным идентификатором для плагина и устанавливать контекст, на который плагин будет реагировать (например. «Content»).
      • $extension
        Имя расширения (компонент), который обрабатывает тип содержимого (например. "com_content").
      • $layout
        Слой для использования при отображении результатов поиска. Например из $layout имеет значение «article», то по умолчанию будет искать файл макета, под названием default_article.php, когда необходимо отображать результат поиска этого типа. Если такого файла не найдено затем файл макета, под названием default_result.php будет использоваться вместо него.
      • $table
        Имя таблицы для извлечения данных из (например. "#__content").
      • $state_field
        Поле базы данных в таблице, где хранится состояние опубликовансти элемента; по умолчанию в «state».

      Основные методы

      Первые методы, которые вы хотите переопределить при разработке нового Smart поиска плагина являются методыsetup, index и getListQuery. В подавляющем большинстве случаев эти три метода будет достаточно, чтобы получить индексированные, содержание, хотя плагин не будет полным, есть другие методы, которые должны быть реализованы для решения таких вопросов, как обновления индекса при изменении содержимого. Но эти три метода являются основной рабочей плагина.

      • setup
        Этот метод вызывается индексатором один раз перед началом работы индексации. Он может использоваться для загрузки библиотек или чтобы инициализировать переменные для плагина. должен возвращать значение true.
      • index
        Это основной метод, вызываемый при индексции. Он вызывается один раз для каждого элемента содержимого, который должен быть проиндексирован (или когда индекс обновляется). Метод index по существу описывает содержимое для индексатора, рассказывая индексатору какие поля для разбора для терминов/фраз и их относительного веса, какие поля для сопоставления в ветви содержания карты и какие данные для включения в индекс в качестве «полезной». Этот метод опишим более подробно позже.
      • getListQuery
        Этот метод должен возвращать объект JDatabaseQuery, который ляжет в основу запроса, который возвращает список объектов данного типа контента. Существуют ограничения на этот запрос, чтобы убедиться, что это совместимо с другими методами, используемые индексатора. Этот метод опишим более подробно позже.

      Некоторые другие методы

      Для полного  плагина умного поиска есть целый ряд других методов, которые необходимо переопределить.

      • translateState
        Полученный элемент контента этот метод переводит родное состояние  элемента контента в состояние, которым может пользоваться индексатор. Он должен вернуть целое число 0, если элемент контента - не появиться в результатах поисках, или целое число 1, если элемент контента может отображаться в результатах поиска.
      • getURL
        Возвращает non-sef URL для элемента. Заданный по умолчанию возврат, пользуясь plg_finder_content например, есть 'index.php?option=com_content&view=article&id=1'.
      • getStateQuery
        Этот метод используется для создания общих запросов для проверки доступа и состояние элементов и их родительских категорий. Этот метод использует свойства $table и $state_field для выбора нужных данных.

      Методы событий

      Следующие методы вызываются через Smart Search content плагин в ответ на события конкретного триггера в Joomla.

      • onFinderBeforeSave
        Вызывается в ответ на событие перед сохранением содержимого onContentBeforeSave.
      • onFinderAfterSave
        Вызывается в ответ на событие после сохранения содержимого  onContentAfterSave.
      • onFinderAfterDelete
        Вызывается в ответ на событие удаления контента onContentDelete.
      • onFinderChangeState
        Вызывается в ответ на событие изменения состояния содержимого onContentChangeState.
      • onFinderCategoryChangeState
        Вызывается в ответ на событие изменения состояния категории onCategoryChangeState.

      Методы более подробно

      getListQuery

      Этот метод должен возвращать объект JDatabaseQuery, который ляжет в основу запроса, который возвращает список объектов данного типа контента. Существуют ограничения на этот запрос, чтобы убедиться, что это совместимо с другими методами, используемые индексатора. Если не выполняются следующие условия, необходимо переопределить другие методы в классе FinderIndexerAdapter.

      • Первоначальная таблица базы данных, которая индексируется, должна иметь псевдоним "a".[1]

      index

      Этот метод вызываемый каждый раз когда элемент контента нужно индексировать (или повторно индексировать). Он передает объект типа Finderindexerresult и его цель - сделать корректировки к этому объекту и добавить метаданные перед передачей управления к Finderindexer::index, чтобы сделать надлежащую индексацию.

      setup

      Этот метод вызывается до метода index и используется для настройки процесса индексирования. В этом методе   обычно будут включаться любые внешне необходимые классы для надлежащей индексации.

      Свойства Finderindexerresult

      • url
      • route
      • title
      • description
      • published
      • state
      • access
      • language
      • publish_start_date
      • publish_end_date
      • extension (используется только в ядре для com_categories плагина)

      Тестирование

      Тестирование поиска плагин может быть немного трудно, с тем, что он обычно выполняется с помощью ajax, так что вы, как правило, не на самом деле видите никаких результатов от процесса.

      Таким образом одним из способов проверки является использование индексатора командной строки..[2]

      Откройте командную prompt/ssh сеанс на сервере и перейдите в корневой каталог веб-сайта. От там вы можете запустить индексатор и ошибки и сообщения журнала будет идти на экран.

      php cli/finder_indexer.php
      

      Notes

      1. Если это условие не выполняется также вам придется переопределения методов getItem, getUpdateQueryByTime и getUpdateQueryByIds
      2. Настройка автоматического Smart индексирования поиска

      Оригинал статьи