Каталоги и поиск в plone

49
Поиск и индексация Поиск и индексация – стандартные задачи. Для решения таких задач в Zope включен специальный объект – ZCatalog.

Upload: -

Post on 14-Jan-2015

372 views

Category:

Documents


4 download

DESCRIPTION

 

TRANSCRIPT

Page 1: Каталоги и поиск в plone

Поиск и индексация

Поиск и индексация – стандартные задачи.

Для решения таких задач в Zope включен специальный объект – ZCatalog.

Page 2: Каталоги и поиск в plone

ZCatalog

ZCatalog позволяет проводить каталогизацию и поиск:

по любым видам объектов Zope по внешним данным:1. реляционные данные2. Файлы3. веб-страницы на других сайтах

Page 3: Каталоги и поиск в plone

Объекты сайта

ИндексыОпределяют условия отбора

Действие ZCatalog

1 2 3 4

Метаданныенабор значений, которые будут отображаться в

результирующем отчете

Page 4: Каталоги и поиск в plone

ZCatalog

Объекты типа ZCatalog – специальные контейнеры

Хранят информацию о каталогизированных объектах в виде объектов –заменителей

Наборы объектов-заменителей формируютсяв индексы

Page 5: Каталоги и поиск в plone

Индексы

Индексы - специализированные базы данных

Хранят информацию о объектах Способны сохранять и очень

быстро извлекать большие объемы данных.

Можете создавать индексы разного вида для сохранения различной информации о ваших объектах.

Page 6: Каталоги и поиск в plone

таблица метаданных

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

Page 7: Каталоги и поиск в plone

таблица метаданных

Для каждого значения отводится отдельный столбец таблицы. Изначально в этой таблице не установлен набор свойств для отображения, в результате мы получаем отчет в виде списка идентификаторов объекта. Свойства можно добавлять в набор и удалять из набора в форме управления каталогом

Page 8: Каталоги и поиск в plone

таблица метаданных

Все объекты запроса имеют эти свойства

Page 9: Каталоги и поиск в plone

Поиск и индексация

Во время поиска каталог не просматривает объекты по одному.

Прежде каталог просматривает все объекты и запоминает информацию об этих объектах.

Этот процесс называется индексацией.

Page 10: Каталоги и поиск в plone

ZCTextIndex

ZCTextIndex – разбивает текст на отдельные слова, используя правила разбиения, определенные в дополнительном объекте ZCTextIndex Lexicon.

Затем слова сортируются по частоте появления в тексте.

Page 11: Каталоги и поиск в plone

Field Indexes

Field Indexes – предназначен для построения индексов по отдельным атрибутам объекта или по их комбинациям.

Так например можно строить индекс по значению атрибута 'meta_type' или 'title'.

Page 12: Каталоги и поиск в plone

DateIndex

DateIndex – предназначен для индексации атрибутов, имеющих тип DateTime.

DateRangeIndex– позволяет индексировать атрибуты объекто, имеющие тип DateTime, по диапазону значений.

Позволяет указывать нижнюю и верхнюю границы диапазона значений индексируемой величины.

Page 13: Каталоги и поиск в plone

Keyword Indexes

Keyword Indexes позволяет строить индексы по атрибутам, принимающим значения из предопределенного списка значений ('keywords').

Индекс будет обрабатывать все объекты, содердащие одно или несколько значений из предопределенного набора

Page 14: Каталоги и поиск в plone

PathIndex

PathIndex индексирует все объекты каталога по значению физического пути к объекту или по его части.

Это позволяет включать в индекс все объекты, путь к которым определен в виде: /<component1>/<component2>/..../<object_id> . Этот тип индекса позволяет производить индексацию объектов только в некоторой части сайта.

Page 15: Каталоги и поиск в plone

TopicIndex

TopicIndex – индекс, представляющий собой промежуточный фильтр, отбирающий объекты по предопределенному условию с целью их дальнейшей индексации по определенному индексному типу.

Используется в случаях, когда критерий индексации слишком большой или громоздкий для прямой индексации. Позволяет проводить двухступенчатую индексацию объектов.

Page 16: Каталоги и поиск в plone

ВСТРОЕННЫЕ КАТАЛОГИ PLONE

Page 17: Каталоги и поиск в plone

В Plone имеются встроенные каталоги

portal_catalog – индексирует все объекты по различным индексам

reference_catalog – индексирует ссылки одних объектов на другие

uid_catalog – сопоставляет уникальные идентификаторы объектам

Page 18: Каталоги и поиск в plone

Программный доступ к каталогу from Products.CMFCore.utils

import getToolByName

getToolByName - служба доступа к встроенным сервисам Plone

Наличие обязательно

Page 19: Каталоги и поиск в plone

Программный доступ к каталогу #получение ссылки на объект

портала urltool = getToolByName(context,

"portal_url") # получение объекта портала

portal = urltool.getPortalObject() Наличие обязательно

Page 20: Каталоги и поиск в plone

Получение каталогов

#получение portal_catalog catalogtool = getToolByName(context,

"portal_catalog") #получение reference_catalog refCatalog = getToolByName(portal,

'reference_catalog') #получение uid_catalog uid_catalog=getToolByName(portal,

'uid_catalog')

Page 21: Каталоги и поиск в plone

ИНДЕКСЫ PORTAL_CATALOG

Page 22: Каталоги и поиск в plone

Множество индексов в portal_catalog позволяют эффективно организовать поиск

Page 23: Каталоги и поиск в plone
Page 24: Каталоги и поиск в plone
Page 25: Каталоги и поиск в plone
Page 26: Каталоги и поиск в plone
Page 27: Каталоги и поиск в plone

ПОИСК

Page 28: Каталоги и поиск в plone

searchResults Метод объекта portal_catalog Производит поиск на основе

передаваемых параметров

Page 29: Каталоги и поиск в plone

Тип ZCTextIndex

Индексы типа ZCTextIndex позволяют индексировать базу потекстовым критериям

SearchableText – индексирует текст всех полей классов, у которых установлен атрибут включения в поиск по тексту

Description - индексирует тексты из поля description

Page 30: Каталоги и поиск в plone

SearchableText index

sort_on - индех, предоставляющий данные для сортировки, в предположении что их можно сортировать

sort_order - определяет направление и порядок сортировки

• sort_limit - определяет количество элементов в результате поска. Указание оптимизирует поиск

Page 31: Каталоги и поиск в plone

Поиск первых пяти опубликованных объектов, отсортированных по дате публикации:

context.portal_catalog.searchResults(review_state = "published",sort_order = "reverse",sort_limit = 5,sort_on="Date”)

Page 32: Каталоги и поиск в plone

Если параметры поиска не указаны, возвращаются все элементы из указанного индекса или всего каталога

Page 33: Каталоги и поиск в plone

FieldIndex

Тип FieldIndex индексирует по свойствам (полям) контент-типов

Для поиска по FieldIndex index передается значение поля:

results = context.portal_catalog.searchResults(

Type = "Image") Поиск в FieldIndex, определенного

для поля Type и значения Image

Page 34: Каталоги и поиск в plone

Индекс по полю может производить поиск по диапазону значений

Диапазон определяется граничными значениями дат, чисел, строк и т.д.

В индекс передается словарь query , содержащий граничные

значения range – определяет способ отбора данныхcreated = { "query": [start, end],"range":

"minmax" }

Page 35: Каталоги и поиск в plone

range

Значения параметра range: min: все значения больше

указанного max: все значения меньше

указанного minmax: все значения меньше

минимума и больше максимума

Page 36: Каталоги и поиск в plone

Поиск всех событий после указанной даты:from Products.CMFCore.utils import getToolByNamefrom DateTime import DateTimeportal_catalog = getToolByName(context,

'portal_catalog')now = DateTime()results = portal_catalog.searchResults(Type = "Event"end = { "query": [now,],"range": "min" })

Page 37: Каталоги и поиск в plone

Для поиска по диапазону , как например для всех событий в декабре, нужно вычислить начальное и конечное значение

start = DateTime('2009/12/01')end = DateTime('2009/12/31')results = portal_catalog.searchResults(Type = "News Item",created = { "query": [start, end],"range": "minmax" })

Page 38: Каталоги и поиск в plone

KeywordIndex

Индекс KeywordIndex возвращает все значения, помеченные соответствующими ключевыми словами.

Определяются параметром Subject Ключевые слова назначаются

через вкладку Properties в странице редактирования объекта.

Page 39: Каталоги и поиск в plone

Поиск всех объектов с ключевым словом Africa :

results = context.portal_catalog.searchResults(

Subject = "Africa")

Page 40: Каталоги и поиск в plone

Как и FieldIndex, индекс KeywordIndex может получать более сложные запросы, используя операторы and/or (“or” по умолчанию).

Указывается в параметре operator:results =

context.portal_catalog.searchResults(Subject = { "query": ["Africa", "sun"],"operator": "and" })

Page 41: Каталоги и поиск в plone

PathIndex

PathIndex позволяет производить поиск объектов по указанию выражения пути.

Так запрос по пути Members вернет все личные папки :

results = context.portal_catalog.searchResults(

path = "/Plone/Members")Все личные папки сайта

Page 42: Каталоги и поиск в plone

Ограничение поиска производится указанием параметра level

Level – число, указывающее позицию в выражении пути. Нумерация идет слева направо разделитель: ‘/’

"/Plone/Members" Plone - уровень 0 Members - уровень 1

Page 43: Каталоги и поиск в plone

Как и в KeywordIndex, можно использовать операторы and/or.

Получить все объекты из /f1/f11/f123 и /f2/f11/f234

results = context.portal_catalog.searchResults(

path = { "query": ["danae"],"level" : 2 })

Page 44: Каталоги и поиск в plone

Python Scripts

results=context.portal_catalog.searchResults(path = { 'query': ['f11'],'level' : 2 })

for i in results: print i.getIdreturn printed

Page 45: Каталоги и поиск в plone

Результат:f11 f11f123 f234

Page 46: Каталоги и поиск в plone

Из поискового запроса необходимо получать метаданные и свойства реальных объектов

Получение обеспечивается методами объекта запроса

Page 47: Каталоги и поиск в plone

getId – id: столбец в таблице метаданных

getPath - физический путь внутри Zope.

getURL - URL текущего объекта. getObject - ссылка на объект. getRID - уникальный ID объекта

в каталоге, меняется при каждом запросе

getИмя_метаданных –общий шаблон

Page 48: Каталоги и поиск в plone

getPath()

results=context.portal_catalog.searchResults(path = { 'query': ['f11'],'level' : 2 })

for i in results: print i.getPath()return printedВывод:/Plone/f1/f11 /Plone/f2/f11 /Plone/f2/f11/f123 /Plone/f1/f11/f234

Page 49: Каталоги и поиск в plone

Получение ссылки на объектresults =

context.portal_catalog.searchResults()

for result in results: object = result.getObject() print objectreturn printed