Реализация инструментальной среды семантического моделирования учебного про...
Каталоги и поиск в plone
1. Поиск и индексация
Поиск и индексация – стандартные задачи.
Для решения таких задач в Zope включен
специальный объект – ZCatalog.
2. ZCatalog
ZCatalog позволяет проводить
каталогизацию и поиск:
по любым видам объектов Zope
по внешним данным:
1. реляционные данные
2. Файлы
3. веб-страницы на других сайтах
3. Действие ZCatalog
Объекты сайта
Индексы
Определяют условия отбора
1 2 3 4
Метаданные
набор значений, которые будут отображаться в
результирующем отчете
4. ZCatalog
Объекты типа ZCatalog – специальные
контейнеры
Хранят информацию о
каталогизированных объектах в виде
объектов –заменителей
Наборы объектов-заменителей
формируютсяв индексы
5. Индексы
Индексы - специализированные базы
данных
Хранят информацию о объектах
Способны сохранять и очень быстро
извлекать большие объемы данных.
Можете создавать индексы разного вида
для сохранения различной информации о
ваших объектах.
6. таблица метаданных
ZCatalog для отображения
результатов поиска имеет специальную
собственную таблицу, подобную
обычной таблице реляционной базы
данных – таблицу метаданных.
Для каждого каталогизируемого типа
объектов можно определить набор
значений, которые будут отображаться
в результирующем отчете.
7. таблица метаданных
Для каждого значения отводится отдельный
столбец таблицы.
Изначально в этой таблице не установлен
набор свойств для отображения, в
результате мы получаем отчет в виде списка
идентификаторов объекта.
Свойства можно добавлять в набор и
удалять из набора в форме управления
каталогом
9. Поиск и индексация
Во время поиска каталог не просматривает
объекты по одному.
Прежде каталог просматривает все
объекты и запоминает информацию об
этих объектах.
Этот процесс называется индексацией.
10. ZCTextIndex
ZCTextIndex – разбивает текст на
отдельные слова, используя
правила разбиения, определенные
в дополнительном объекте
ZCTextIndex Lexicon.
Затем слова сортируются по
частоте появления в тексте.
11. Field Indexes
Field Indexes – предназначен для
построения индексов по отдельным
атрибутам объекта или по их
комбинациям.
Так например можно строить индекс по
значению атрибута 'meta_type' или
'title'.
12. DateIndex
DateIndex – предназначен для
индексации атрибутов, имеющих тип
DateTime.
DateRangeIndex– позволяет
индексировать атрибуты объекто,
имеющие тип DateTime, по диапазону
значений.
Позволяет указывать нижнюю и
верхнюю границы диапазона значений
индексируемой величины.
13. Keyword Indexes
Keyword Indexes позволяет строить
индексы по атрибутам, принимающим
значения из предопределенного списка
значений ('keywords').
Индекс будет обрабатывать все
объекты, содердащие одно или
несколько значений из
предопределенного набора
14. PathIndex
PathIndex индексирует все объекты каталога
по значению физического пути к объекту или
по его части.
Это позволяет включать в индекс все объекты,
путь к которым определен в виде:
/<component1>/<component2>/..../<object_id> .
Этот тип индекса позволяет производить
индексацию объектов только в некоторой
части сайта.
15. TopicIndex
TopicIndex – индекс, представляющий собой
промежуточный фильтр, отбирающий
объекты по предопределенному условию с
целью их дальнейшей индексации по
определенному индексному типу.
Используется в случаях, когда критерий
индексации слишком большой или
громоздкий для прямой индексации.
Позволяет проводить двухступенчатую
индексацию объектов.
17. В Plone имеются встроенные каталоги
portal_catalog – индексирует все объекты
по различным индексам
reference_catalog – индексирует ссылки
одних объектов на другие
uid_catalog – сопоставляет уникальные
идентификаторы объектам
18. Программный доступ к каталогу
from Products.CMFCore.utils import
getToolByName
getToolByName - служба доступа к
встроенным сервисам Plone
Наличие обязательно
19. Программный доступ к каталогу
#получение ссылки на объект портала
urltool = getToolByName(context,
"portal_url")
# получение объекта портала
portal = urltool.getPortalObject()
Наличие обязательно
28. searchResults
Метод объекта portal_catalog
Производит поиск на основе
передаваемых параметров
29. Тип ZCTextIndex
Индексы типа ZCTextIndex позволяют
индексировать базу потекстовым
критериям
SearchableText – индексирует текст всех
полей классов, у которых установлен
атрибут включения в поиск по тексту
Description - индексирует тексты из поля
description
30. SearchableText index
sort_on - индех, предоставляющий
данные для сортировки, в предположении
что их можно сортировать
sort_order - определяет направление и
порядок сортировки
• sort_limit - определяет количество
элементов в результате поска. Указание
оптимизирует поиск
31. Поиск первых пяти опубликованных
объектов, отсортированных по дате
публикации:
context.portal_catalog.searchResults(
review_state = "published",
sort_order = "reverse",
sort_limit = 5,
sort_on="Date”
)
32. Если параметры поиска не указаны,
возвращаются все элементы из указанного
индекса или всего каталога
33. FieldIndex
Тип FieldIndex индексирует по свойствам
(полям) контент-типов
Для поиска по FieldIndex index передается
значение поля:
results = context.portal_catalog.searchResults(
Type = "Image")
Поиск в FieldIndex, определенного для
поля Type и значения Image
34. Индекс по полю может производить поиск по
диапазону значений
Диапазон определяется граничными
значениями дат, чисел, строк и т.д.
В индекс передается
словарь query , содержащий граничные
значения
range – определяет способ отбора данных
created = { "query": [start, end],"range": "minmax" }
35. range
Значения параметра range:
min: все значения больше указанного
max: все значения меньше указанного
minmax: все значения меньше минимума и
больше максимума
36. Поиск всех событий после указанной даты:
from Products.CMFCore.utils import getToolByName
from DateTime import DateTime
portal_catalog = getToolByName(context,
'portal_catalog')
now = DateTime()
results = portal_catalog.searchResults(
Type = "Event"
end = { "query": [now,],
"range": "min" }
)
37. Для поиска по диапазону , как например для
всех событий в декабре, нужно вычислить
начальное и конечное значение
start = DateTime('2009/12/01')
end = DateTime('2009/12/31')
results = portal_catalog.searchResults(
Type = "News Item",
created = { "query": [start, end],
"range": "minmax" }
)
38. KeywordIndex
Индекс KeywordIndex возвращает все
значения, помеченные соответствующими
ключевыми словами.
Определяются параметром Subject
Ключевые слова назначаются через
вкладку Properties в странице
редактирования объекта.
39. Поиск всех объектов с ключевым словом
Africa :
results = context.portal_catalog.searchResults(
Subject = "Africa"
)
40. Как и FieldIndex, индекс KeywordIndex
может получать более сложные запросы,
используя операторы and/or (“or” по
умолчанию).
Указывается в параметре operator:
results = context.portal_catalog.searchResults(
Subject = { "query": ["Africa", "sun"],
"operator": "and" }
)
41. PathIndex
PathIndex позволяет производить поиск
объектов по указанию выражения пути.
Так запрос по пути Members вернет все
личные папки :
results = context.portal_catalog.searchResults(
path = "/Plone/Members"
)
Все личные папки сайта
42. Ограничение поиска производится
указанием параметра level
Level – число, указывающее позицию в
выражении пути. Нумерация идет слева
направо разделитель: ‘/’
"/Plone/Members"
Plone - уровень 0
Members - уровень 1
43. Как и в KeywordIndex, можно использовать
операторы and/or.
Получить все объекты из /f1/f11/f123 и
/f2/f11/f234
results = context.portal_catalog.searchResults(
path = { "query": ["danae"],
"level" : 2 }
)
46. Из поискового запроса необходимо
получать метаданные и свойства реальных
объектов
Получение обеспечивается методами
объекта запроса
47. getId – id: столбец в таблице метаданных
getPath - физический путь внутри Zope.
getURL - URL текущего объекта.
getObject - ссылка на объект.
getRID - уникальный ID объекта в
каталоге, меняется при каждом запросе
getИмя_метаданных –общий шаблон
49. Получение ссылки на объект
results = context.portal_catalog.searchResults()
for result in results:
object = result.getObject()
print object
return printed