Каталоги и поиск в plone
DESCRIPTION
TRANSCRIPT
![Page 1: Каталоги и поиск в plone](https://reader033.vdocuments.site/reader033/viewer/2022061218/54b61a094a795906558b4580/html5/thumbnails/1.jpg)
Поиск и индексация
Поиск и индексация – стандартные задачи.
Для решения таких задач в Zope включен специальный объект – ZCatalog.
![Page 2: Каталоги и поиск в plone](https://reader033.vdocuments.site/reader033/viewer/2022061218/54b61a094a795906558b4580/html5/thumbnails/2.jpg)
ZCatalog
ZCatalog позволяет проводить каталогизацию и поиск:
по любым видам объектов Zope по внешним данным:1. реляционные данные2. Файлы3. веб-страницы на других сайтах
![Page 3: Каталоги и поиск в plone](https://reader033.vdocuments.site/reader033/viewer/2022061218/54b61a094a795906558b4580/html5/thumbnails/3.jpg)
Объекты сайта
ИндексыОпределяют условия отбора
Действие ZCatalog
1 2 3 4
Метаданныенабор значений, которые будут отображаться в
результирующем отчете
![Page 4: Каталоги и поиск в plone](https://reader033.vdocuments.site/reader033/viewer/2022061218/54b61a094a795906558b4580/html5/thumbnails/4.jpg)
ZCatalog
Объекты типа ZCatalog – специальные контейнеры
Хранят информацию о каталогизированных объектах в виде объектов –заменителей
Наборы объектов-заменителей формируютсяв индексы
![Page 5: Каталоги и поиск в plone](https://reader033.vdocuments.site/reader033/viewer/2022061218/54b61a094a795906558b4580/html5/thumbnails/5.jpg)
Индексы
Индексы - специализированные базы данных
Хранят информацию о объектах Способны сохранять и очень
быстро извлекать большие объемы данных.
Можете создавать индексы разного вида для сохранения различной информации о ваших объектах.
![Page 6: Каталоги и поиск в plone](https://reader033.vdocuments.site/reader033/viewer/2022061218/54b61a094a795906558b4580/html5/thumbnails/6.jpg)
таблица метаданных
ZCatalog для отображения результатов поиска имеет специальную собственную таблицу, подобную обычной таблице реляционной базы данных – таблицу метаданных. Для каждого каталогизируемого типа объектов можно определить набор значений, которые будут отображаться в результирующем отчете.
![Page 7: Каталоги и поиск в plone](https://reader033.vdocuments.site/reader033/viewer/2022061218/54b61a094a795906558b4580/html5/thumbnails/7.jpg)
таблица метаданных
Для каждого значения отводится отдельный столбец таблицы. Изначально в этой таблице не установлен набор свойств для отображения, в результате мы получаем отчет в виде списка идентификаторов объекта. Свойства можно добавлять в набор и удалять из набора в форме управления каталогом
![Page 8: Каталоги и поиск в plone](https://reader033.vdocuments.site/reader033/viewer/2022061218/54b61a094a795906558b4580/html5/thumbnails/8.jpg)
таблица метаданных
Все объекты запроса имеют эти свойства
![Page 9: Каталоги и поиск в plone](https://reader033.vdocuments.site/reader033/viewer/2022061218/54b61a094a795906558b4580/html5/thumbnails/9.jpg)
Поиск и индексация
Во время поиска каталог не просматривает объекты по одному.
Прежде каталог просматривает все объекты и запоминает информацию об этих объектах.
Этот процесс называется индексацией.
![Page 10: Каталоги и поиск в plone](https://reader033.vdocuments.site/reader033/viewer/2022061218/54b61a094a795906558b4580/html5/thumbnails/10.jpg)
ZCTextIndex
ZCTextIndex – разбивает текст на отдельные слова, используя правила разбиения, определенные в дополнительном объекте ZCTextIndex Lexicon.
Затем слова сортируются по частоте появления в тексте.
![Page 11: Каталоги и поиск в plone](https://reader033.vdocuments.site/reader033/viewer/2022061218/54b61a094a795906558b4580/html5/thumbnails/11.jpg)
Field Indexes
Field Indexes – предназначен для построения индексов по отдельным атрибутам объекта или по их комбинациям.
Так например можно строить индекс по значению атрибута 'meta_type' или 'title'.
![Page 12: Каталоги и поиск в plone](https://reader033.vdocuments.site/reader033/viewer/2022061218/54b61a094a795906558b4580/html5/thumbnails/12.jpg)
DateIndex
DateIndex – предназначен для индексации атрибутов, имеющих тип DateTime.
DateRangeIndex– позволяет индексировать атрибуты объекто, имеющие тип DateTime, по диапазону значений.
Позволяет указывать нижнюю и верхнюю границы диапазона значений индексируемой величины.
![Page 13: Каталоги и поиск в plone](https://reader033.vdocuments.site/reader033/viewer/2022061218/54b61a094a795906558b4580/html5/thumbnails/13.jpg)
Keyword Indexes
Keyword Indexes позволяет строить индексы по атрибутам, принимающим значения из предопределенного списка значений ('keywords').
Индекс будет обрабатывать все объекты, содердащие одно или несколько значений из предопределенного набора
![Page 14: Каталоги и поиск в plone](https://reader033.vdocuments.site/reader033/viewer/2022061218/54b61a094a795906558b4580/html5/thumbnails/14.jpg)
PathIndex
PathIndex индексирует все объекты каталога по значению физического пути к объекту или по его части.
Это позволяет включать в индекс все объекты, путь к которым определен в виде: /<component1>/<component2>/..../<object_id> . Этот тип индекса позволяет производить индексацию объектов только в некоторой части сайта.
![Page 15: Каталоги и поиск в plone](https://reader033.vdocuments.site/reader033/viewer/2022061218/54b61a094a795906558b4580/html5/thumbnails/15.jpg)
TopicIndex
TopicIndex – индекс, представляющий собой промежуточный фильтр, отбирающий объекты по предопределенному условию с целью их дальнейшей индексации по определенному индексному типу.
Используется в случаях, когда критерий индексации слишком большой или громоздкий для прямой индексации. Позволяет проводить двухступенчатую индексацию объектов.
![Page 16: Каталоги и поиск в plone](https://reader033.vdocuments.site/reader033/viewer/2022061218/54b61a094a795906558b4580/html5/thumbnails/16.jpg)
ВСТРОЕННЫЕ КАТАЛОГИ PLONE
![Page 17: Каталоги и поиск в plone](https://reader033.vdocuments.site/reader033/viewer/2022061218/54b61a094a795906558b4580/html5/thumbnails/17.jpg)
В Plone имеются встроенные каталоги
portal_catalog – индексирует все объекты по различным индексам
reference_catalog – индексирует ссылки одних объектов на другие
uid_catalog – сопоставляет уникальные идентификаторы объектам
![Page 18: Каталоги и поиск в plone](https://reader033.vdocuments.site/reader033/viewer/2022061218/54b61a094a795906558b4580/html5/thumbnails/18.jpg)
Программный доступ к каталогу from Products.CMFCore.utils
import getToolByName
getToolByName - служба доступа к встроенным сервисам Plone
Наличие обязательно
![Page 19: Каталоги и поиск в plone](https://reader033.vdocuments.site/reader033/viewer/2022061218/54b61a094a795906558b4580/html5/thumbnails/19.jpg)
Программный доступ к каталогу #получение ссылки на объект
портала urltool = getToolByName(context,
"portal_url") # получение объекта портала
portal = urltool.getPortalObject() Наличие обязательно
![Page 20: Каталоги и поиск в plone](https://reader033.vdocuments.site/reader033/viewer/2022061218/54b61a094a795906558b4580/html5/thumbnails/20.jpg)
Получение каталогов
#получение 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](https://reader033.vdocuments.site/reader033/viewer/2022061218/54b61a094a795906558b4580/html5/thumbnails/21.jpg)
ИНДЕКСЫ PORTAL_CATALOG
![Page 22: Каталоги и поиск в plone](https://reader033.vdocuments.site/reader033/viewer/2022061218/54b61a094a795906558b4580/html5/thumbnails/22.jpg)
Множество индексов в portal_catalog позволяют эффективно организовать поиск
![Page 23: Каталоги и поиск в plone](https://reader033.vdocuments.site/reader033/viewer/2022061218/54b61a094a795906558b4580/html5/thumbnails/23.jpg)
![Page 24: Каталоги и поиск в plone](https://reader033.vdocuments.site/reader033/viewer/2022061218/54b61a094a795906558b4580/html5/thumbnails/24.jpg)
![Page 25: Каталоги и поиск в plone](https://reader033.vdocuments.site/reader033/viewer/2022061218/54b61a094a795906558b4580/html5/thumbnails/25.jpg)
![Page 26: Каталоги и поиск в plone](https://reader033.vdocuments.site/reader033/viewer/2022061218/54b61a094a795906558b4580/html5/thumbnails/26.jpg)
![Page 27: Каталоги и поиск в plone](https://reader033.vdocuments.site/reader033/viewer/2022061218/54b61a094a795906558b4580/html5/thumbnails/27.jpg)
ПОИСК
![Page 28: Каталоги и поиск в plone](https://reader033.vdocuments.site/reader033/viewer/2022061218/54b61a094a795906558b4580/html5/thumbnails/28.jpg)
searchResults Метод объекта portal_catalog Производит поиск на основе
передаваемых параметров
![Page 29: Каталоги и поиск в plone](https://reader033.vdocuments.site/reader033/viewer/2022061218/54b61a094a795906558b4580/html5/thumbnails/29.jpg)
Тип ZCTextIndex
Индексы типа ZCTextIndex позволяют индексировать базу потекстовым критериям
SearchableText – индексирует текст всех полей классов, у которых установлен атрибут включения в поиск по тексту
Description - индексирует тексты из поля description
![Page 30: Каталоги и поиск в plone](https://reader033.vdocuments.site/reader033/viewer/2022061218/54b61a094a795906558b4580/html5/thumbnails/30.jpg)
SearchableText index
sort_on - индех, предоставляющий данные для сортировки, в предположении что их можно сортировать
sort_order - определяет направление и порядок сортировки
• sort_limit - определяет количество элементов в результате поска. Указание оптимизирует поиск
![Page 31: Каталоги и поиск в plone](https://reader033.vdocuments.site/reader033/viewer/2022061218/54b61a094a795906558b4580/html5/thumbnails/31.jpg)
Поиск первых пяти опубликованных объектов, отсортированных по дате публикации:
context.portal_catalog.searchResults(review_state = "published",sort_order = "reverse",sort_limit = 5,sort_on="Date”)
![Page 32: Каталоги и поиск в plone](https://reader033.vdocuments.site/reader033/viewer/2022061218/54b61a094a795906558b4580/html5/thumbnails/32.jpg)
Если параметры поиска не указаны, возвращаются все элементы из указанного индекса или всего каталога
![Page 33: Каталоги и поиск в plone](https://reader033.vdocuments.site/reader033/viewer/2022061218/54b61a094a795906558b4580/html5/thumbnails/33.jpg)
FieldIndex
Тип FieldIndex индексирует по свойствам (полям) контент-типов
Для поиска по FieldIndex index передается значение поля:
results = context.portal_catalog.searchResults(
Type = "Image") Поиск в FieldIndex, определенного
для поля Type и значения Image
![Page 34: Каталоги и поиск в plone](https://reader033.vdocuments.site/reader033/viewer/2022061218/54b61a094a795906558b4580/html5/thumbnails/34.jpg)
Индекс по полю может производить поиск по диапазону значений
Диапазон определяется граничными значениями дат, чисел, строк и т.д.
В индекс передается словарь query , содержащий граничные
значения range – определяет способ отбора данныхcreated = { "query": [start, end],"range":
"minmax" }
![Page 35: Каталоги и поиск в plone](https://reader033.vdocuments.site/reader033/viewer/2022061218/54b61a094a795906558b4580/html5/thumbnails/35.jpg)
range
Значения параметра range: min: все значения больше
указанного max: все значения меньше
указанного minmax: все значения меньше
минимума и больше максимума
![Page 36: Каталоги и поиск в plone](https://reader033.vdocuments.site/reader033/viewer/2022061218/54b61a094a795906558b4580/html5/thumbnails/36.jpg)
Поиск всех событий после указанной даты: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](https://reader033.vdocuments.site/reader033/viewer/2022061218/54b61a094a795906558b4580/html5/thumbnails/37.jpg)
Для поиска по диапазону , как например для всех событий в декабре, нужно вычислить начальное и конечное значение
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](https://reader033.vdocuments.site/reader033/viewer/2022061218/54b61a094a795906558b4580/html5/thumbnails/38.jpg)
KeywordIndex
Индекс KeywordIndex возвращает все значения, помеченные соответствующими ключевыми словами.
Определяются параметром Subject Ключевые слова назначаются
через вкладку Properties в странице редактирования объекта.
![Page 39: Каталоги и поиск в plone](https://reader033.vdocuments.site/reader033/viewer/2022061218/54b61a094a795906558b4580/html5/thumbnails/39.jpg)
Поиск всех объектов с ключевым словом Africa :
results = context.portal_catalog.searchResults(
Subject = "Africa")
![Page 40: Каталоги и поиск в plone](https://reader033.vdocuments.site/reader033/viewer/2022061218/54b61a094a795906558b4580/html5/thumbnails/40.jpg)
Как и FieldIndex, индекс KeywordIndex может получать более сложные запросы, используя операторы and/or (“or” по умолчанию).
Указывается в параметре operator:results =
context.portal_catalog.searchResults(Subject = { "query": ["Africa", "sun"],"operator": "and" })
![Page 41: Каталоги и поиск в plone](https://reader033.vdocuments.site/reader033/viewer/2022061218/54b61a094a795906558b4580/html5/thumbnails/41.jpg)
PathIndex
PathIndex позволяет производить поиск объектов по указанию выражения пути.
Так запрос по пути Members вернет все личные папки :
results = context.portal_catalog.searchResults(
path = "/Plone/Members")Все личные папки сайта
![Page 42: Каталоги и поиск в plone](https://reader033.vdocuments.site/reader033/viewer/2022061218/54b61a094a795906558b4580/html5/thumbnails/42.jpg)
Ограничение поиска производится указанием параметра level
Level – число, указывающее позицию в выражении пути. Нумерация идет слева направо разделитель: ‘/’
"/Plone/Members" Plone - уровень 0 Members - уровень 1
![Page 43: Каталоги и поиск в plone](https://reader033.vdocuments.site/reader033/viewer/2022061218/54b61a094a795906558b4580/html5/thumbnails/43.jpg)
Как и в KeywordIndex, можно использовать операторы and/or.
Получить все объекты из /f1/f11/f123 и /f2/f11/f234
results = context.portal_catalog.searchResults(
path = { "query": ["danae"],"level" : 2 })
![Page 44: Каталоги и поиск в plone](https://reader033.vdocuments.site/reader033/viewer/2022061218/54b61a094a795906558b4580/html5/thumbnails/44.jpg)
Python Scripts
results=context.portal_catalog.searchResults(path = { 'query': ['f11'],'level' : 2 })
for i in results: print i.getIdreturn printed
![Page 45: Каталоги и поиск в plone](https://reader033.vdocuments.site/reader033/viewer/2022061218/54b61a094a795906558b4580/html5/thumbnails/45.jpg)
Результат:f11 f11f123 f234
![Page 46: Каталоги и поиск в plone](https://reader033.vdocuments.site/reader033/viewer/2022061218/54b61a094a795906558b4580/html5/thumbnails/46.jpg)
Из поискового запроса необходимо получать метаданные и свойства реальных объектов
Получение обеспечивается методами объекта запроса
![Page 47: Каталоги и поиск в plone](https://reader033.vdocuments.site/reader033/viewer/2022061218/54b61a094a795906558b4580/html5/thumbnails/47.jpg)
getId – id: столбец в таблице метаданных
getPath - физический путь внутри Zope.
getURL - URL текущего объекта. getObject - ссылка на объект. getRID - уникальный ID объекта
в каталоге, меняется при каждом запросе
getИмя_метаданных –общий шаблон
![Page 48: Каталоги и поиск в plone](https://reader033.vdocuments.site/reader033/viewer/2022061218/54b61a094a795906558b4580/html5/thumbnails/48.jpg)
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](https://reader033.vdocuments.site/reader033/viewer/2022061218/54b61a094a795906558b4580/html5/thumbnails/49.jpg)
Получение ссылки на объектresults =
context.portal_catalog.searchResults()
for result in results: object = result.getObject() print objectreturn printed