Построение indexes

Теперь необходимо зарегистрировать модели, которые требуется сохранить в поисковой механизме. Конвенция для Haystack гласит что нужно создать файл search_indexes.py в приложении и зарегестрировать там свои модели. Создайте новый файл в каталоге приложения блога и назовите его search_indexes.py. Добавьте в него следующий код:

from haystack import indexes
from .models import Post

class PostIndex(indexes.SearchIndex, indexes.Indexable):
    text = indexes.CharField(document=True, use_template=True)
    publish = indexes.DateTimeField(model_attr='publish')

    def get_model(self):
        return Post

    def index_queryset(self, using=None):
        return self.get_model().published.all()

Это пользовательская настройка SearchIndex для модели Post. С помощью этого индекса мы говорим Haystack, какие данные из этой модели должны индексироваться в поисковом механизме. Индекс строится по индексам подкласса indexes.SearchIndex и indexes.Indexable. Каждый SearchIndex требует, чтобы одно из его полей имело document=True. Конвенция говорит нам назвать это поле text. Это поле является основным полем поиска. С use_template=True, мы говорим Haystack, что это поле будет отображаться в шаблоне данных для построения документа, который будет индексироваться поисковым механизмом. Поле publish — это поле datetime, которое будет также индексироваться. Мы указали, что это поле соответствует полю публикации модели Post, используя параметр model_attr. Поле будет индексироваться с содержимым поля publish индексированного объекта Post.

Дополнительные поля, подобные этому, полезны для предоставления дополнительных фильтров для поиска. Метод get_model() должен вернуть модель для документов, которые будут храниться в этом индексе. Метод index_queryset() возвращает QuerySet для объектов, которые будут индексироваться. Обратите внимание, что индексироваться будут только опубликованные записи.

Теперь создайте файл search/indexes/blog/post_text.txt в каталоге шаблонов приложения блога и добавьте в него следующий код:

{{ object.title }}
{{ object.tags.all|join:", " }}
{{ object.body }}

Это путь по умолчанию для шаблона документа для поля text нашего индекса. Haystack использует имя приложения и имя модели для динамического построения пути. Каждый раз, когда мы собираемся индексировать объект, Haystack будет строить документ на основе этого шаблона, а затем индексировать документ в поисковой механизме Solr.

Теперь, когда у нас есть пользовательский search index, необходимо создать соответствующую схему Solr. Конфигурация Solr основана на XML, поэтому необходимо создать схему XML для данных, которые мы собираемся индексировать. К счастью, Haystack предлагает способ динамического создания схемы на основе наших индексов поиска. Откройте терминал и выполните следующую команду:

python manage.py build_solr_schema

Необходимо просмотреть выходные данные XML. Если взглянуть на нижнюю часть созданного кода XML, вы увидите, что поля PostIndex, Haystack генерирует автоматически:

<field name="text" type="text_en" indexed="true" stored="true" multiValued="false" />
<field name="publish" type="date" indexed="true" stored="true" multiValued="false" />

Скопируйте все выходные данные XML из исходного тега <?xml version="1.0" ?> до тега </schema>

Этот XML-это схема для индексации данных в Solr. Вставьте новую схему в файл blog/conf/schema.xml в каталоге установки Solr. Файл schema.xml включается в код, который поставляется вместе с этой главой, поэтому можно также скопировать.

Откройте http://127.0.0.1:8983/Solr/ в браузере и перейдите на вкладку Core Admin, затем щелкните в blog, а затем нажмите кнопку Reload:

Мы перегрузили ядро, чтобы оно учитывало изменения из schema.xml. Когда ядро завершит перезагрузку, Новая схема будет готова к индексированию новых данных.

results matching ""

    No results matching ""