SlideShare a Scribd company logo
1 of 49
Поиск и индексация

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

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



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




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




1                 2               3                4




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

 Объекты типа ZCatalog – специальные
  контейнеры
 Хранят информацию о
  каталогизированных объектах в виде
  объектов –заменителей
 Наборы объектов-заменителей
  формируютсяв индексы
Индексы

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

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

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

           Все объекты
            запроса
            имеют эти
            свойства
Поиск и индексация

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

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

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

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

 Field Indexes – предназначен для
  построения индексов по отдельным
  атрибутам объекта или по их
  комбинациям.
 Так например можно строить индекс по
  значению атрибута 'meta_type' или
  'title'.
DateIndex

 DateIndex – предназначен для
  индексации атрибутов, имеющих тип
  DateTime.
 DateRangeIndex– позволяет
  индексировать атрибуты объекто,
  имеющие тип DateTime, по диапазону
  значений.
 Позволяет указывать нижнюю и
  верхнюю границы диапазона значений
  индексируемой величины.
Keyword Indexes

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

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

 TopicIndex – индекс, представляющий собой
  промежуточный фильтр, отбирающий
  объекты по предопределенному условию с
  целью их дальнейшей индексации по
  определенному индексному типу.
 Используется в случаях, когда критерий
  индексации слишком большой или
  громоздкий для прямой индексации.
  Позволяет проводить двухступенчатую
  индексацию объектов.
ВСТРОЕННЫЕ КАТАЛОГИ PLONE
 В Plone имеются встроенные каталоги
 portal_catalog – индексирует все объекты
  по различным индексам
 reference_catalog – индексирует ссылки
  одних объектов на другие
 uid_catalog – сопоставляет уникальные
  идентификаторы объектам
Программный доступ к каталогу

 from Products.CMFCore.utils import
 getToolByName

 getToolByName - служба доступа к
  встроенным сервисам Plone
 Наличие обязательно
Программный доступ к каталогу

 #получение ссылки на объект портала
 urltool = getToolByName(context,
  "portal_url")
 # получение объекта портала
  portal = urltool.getPortalObject()
 Наличие обязательно
Получение каталогов

 #получение portal_catalog
 catalogtool = getToolByName(context,
  "portal_catalog")
 #получение reference_catalog
 refCatalog = getToolByName(portal,
  'reference_catalog')
 #получение uid_catalog
 uid_catalog=getToolByName(portal,
  'uid_catalog')
ИНДЕКСЫ PORTAL_CATALOG
 Множество индексов в
  portal_catalog позволяют
  эффективно организовать
  поиск
ПОИСК
 searchResults
 Метод объекта portal_catalog
 Производит поиск на основе
  передаваемых параметров
Тип    ZCTextIndex

 Индексы типа ZCTextIndex позволяют
  индексировать базу потекстовым
  критериям
 SearchableText – индексирует текст всех
  полей классов, у которых установлен
  атрибут включения в поиск по тексту
 Description - индексирует тексты из поля
  description
SearchableText index

 sort_on - индех, предоставляющий
  данные для сортировки, в предположении
  что их можно сортировать
 sort_order - определяет направление и
  порядок сортировки
 • sort_limit - определяет количество
  элементов в результате поска. Указание
  оптимизирует поиск
Поиск первых пяти опубликованных
  объектов, отсортированных по дате
  публикации:
context.portal_catalog.searchResults(
review_state = "published",
sort_order = "reverse",
sort_limit = 5,
sort_on="Date”
)
 Если параметры поиска не указаны,
  возвращаются все элементы из указанного
  индекса или всего каталога
FieldIndex

 Тип FieldIndex индексирует по свойствам
  (полям) контент-типов
 Для поиска по FieldIndex index передается
  значение поля:
results = context.portal_catalog.searchResults(
Type = "Image")
 Поиск в FieldIndex, определенного для
  поля Type и значения Image
Индекс по полю может производить поиск по
  диапазону значений
Диапазон определяется граничными
  значениями дат, чисел, строк и т.д.
В индекс передается
словарь query , содержащий граничные
  значения
range – определяет способ отбора данных
created = { "query": [start, end],"range": "minmax" }
range

 Значения параметра range:
 min: все значения больше указанного
 max: все значения меньше указанного
 minmax: все значения меньше минимума и
  больше максимума
Поиск всех событий после указанной даты:
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" }
)
Для поиска по диапазону , как например для
   всех событий в декабре, нужно вычислить
   начальное и конечное значение
start = DateTime('2009/12/01')
end = DateTime('2009/12/31')
results = portal_catalog.searchResults(
Type = "News Item",
created = { "query": [start, end],
"range": "minmax" }
)
KeywordIndex

 Индекс KeywordIndex возвращает все
  значения, помеченные соответствующими
  ключевыми словами.
 Определяются параметром Subject
 Ключевые слова назначаются через
 вкладку Properties в странице
 редактирования объекта.
Поиск всех объектов с ключевым словом
  Africa :
results = context.portal_catalog.searchResults(
Subject = "Africa"
)
 Как и FieldIndex, индекс KeywordIndex
  может получать более сложные запросы,
  используя операторы and/or (“or” по
  умолчанию).
 Указывается в параметре operator:
results = context.portal_catalog.searchResults(
Subject = { "query": ["Africa", "sun"],
"operator": "and" }
)
PathIndex

 PathIndex позволяет производить поиск
  объектов по указанию выражения пути.
 Так запрос по пути Members вернет все
  личные папки :
results = context.portal_catalog.searchResults(
path = "/Plone/Members"
)
Все личные папки сайта
 Ограничение поиска производится
  указанием параметра level
 Level – число, указывающее позицию в
  выражении пути. Нумерация идет слева
 направо разделитель: ‘/’

 "/Plone/Members"
 Plone - уровень 0
 Members - уровень 1
 Как и в KeywordIndex, можно использовать
  операторы and/or.
 Получить все объекты из /f1/f11/f123 и
   /f2/f11/f234
results = context.portal_catalog.searchResults(
path = { "query": ["danae"],
"level" : 2 }
)
Python Scripts

results=context.portal_catalog.searchResults(p
   ath = { 'query': ['f11'],'level' : 2 })
for i in results:
  print i.getId
return printed
Результат:
f11
f11
f123
f234
 Из поискового запроса необходимо
  получать метаданные и свойства реальных
  объектов
 Получение обеспечивается методами
 объекта запроса
 getId – id: столбец в таблице метаданных
 getPath - физический путь внутри Zope.
 getURL - URL текущего объекта.
 getObject - ссылка на объект.
 getRID - уникальный ID объекта в
  каталоге, меняется при каждом запросе

 getИмя_метаданных –общий шаблон
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
Получение ссылки на объект

results = context.portal_catalog.searchResults()
for result in results:
   object = result.getObject()
   print object
return printed

More Related Content

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

вебинар - функциональное тестирование с использованием Selenium 2 и TestNG
вебинар - функциональное тестирование с использованием Selenium 2 и TestNGвебинар - функциональное тестирование с использованием Selenium 2 и TestNG
вебинар - функциональное тестирование с использованием Selenium 2 и TestNGAndrey Rebrov
 
C# Desktop. Занятие 02.
C# Desktop. Занятие 02.C# Desktop. Занятие 02.
C# Desktop. Занятие 02.Igor Shkulipa
 
C# Web. Занятие 04.
C# Web. Занятие 04.C# Web. Занятие 04.
C# Web. Занятие 04.Igor Shkulipa
 
Индексация данных с помощью Elasticsearch и Logstash
Индексация данных с помощью Elasticsearch и LogstashИндексация данных с помощью Elasticsearch и Logstash
Индексация данных с помощью Elasticsearch и LogstashAndrew Zavadsky
 
Kozhemyakin dcm2011 1
Kozhemyakin dcm2011 1Kozhemyakin dcm2011 1
Kozhemyakin dcm2011 1drupalconf
 
12 - Web-технологии. Django модели
12 - Web-технологии. Django модели12 - Web-технологии. Django модели
12 - Web-технологии. Django моделиRoman Brovko
 
C++ STL & Qt. Занятие 01.
C++ STL & Qt. Занятие 01.C++ STL & Qt. Занятие 01.
C++ STL & Qt. Занятие 01.Igor Shkulipa
 
#4 Иерархия классов Android SDK.pdf
#4   Иерархия классов Android SDK.pdf#4   Иерархия классов Android SDK.pdf
#4 Иерархия классов Android SDK.pdfSergeyAn2
 
Roslyn API : SyntaxTree vs CodeDom, SemanticModel vs Reflection
Roslyn API: SyntaxTree vs CodeDom, SemanticModel vs ReflectionRoslyn API: SyntaxTree vs CodeDom, SemanticModel vs Reflection
Roslyn API : SyntaxTree vs CodeDom, SemanticModel vs ReflectionDenis Tsvettsih
 
MongoDB - About Performance Optimization, Ivan Griga - Smart Gamma
MongoDB - About Performance Optimization, Ivan Griga - Smart GammaMongoDB - About Performance Optimization, Ivan Griga - Smart Gamma
MongoDB - About Performance Optimization, Ivan Griga - Smart GammaEvgeniy Kuzmin
 
Влад Ковташ — Yap Database
Влад Ковташ — Yap DatabaseВлад Ковташ — Yap Database
Влад Ковташ — Yap DatabaseCocoaHeads
 
13 14 15_индексирование
13 14 15_индексирование13 14 15_индексирование
13 14 15_индексированиеEvgeniy Golendyhin
 
C# Web. Занятие 12.
C# Web. Занятие 12.C# Web. Занятие 12.
C# Web. Занятие 12.Igor Shkulipa
 
kranonitS20 Сергей Бурма. Django - легко, быстро, эффективно
kranonitS20 Сергей Бурма. Django - легко, быстро, эффективноkranonitS20 Сергей Бурма. Django - легко, быстро, эффективно
kranonitS20 Сергей Бурма. Django - легко, быстро, эффективноKrivoy Rog IT Community
 
View как чистая функция от состояния базы данных - Илья Беда, bro.agency
View как чистая функция от состояния базы данных  - Илья Беда, bro.agencyView как чистая функция от состояния базы данных  - Илья Беда, bro.agency
View как чистая функция от состояния базы данных - Илья Беда, bro.agencyit-people
 
RxJava + Retrofit
RxJava + RetrofitRxJava + Retrofit
RxJava + RetrofitDev2Dev
 
Apache Lucene + Hibernate = Hibernate Search
Apache Lucene + Hibernate = Hibernate SearchApache Lucene + Hibernate = Hibernate Search
Apache Lucene + Hibernate = Hibernate SearchVitebsk Miniq
 
Индексируй неиндексирумое
Индексируй неиндексирумоеИндексируй неиндексирумое
Индексируй неиндексирумоеAlexander Byndyu
 

Similar to Каталоги и поиск в plone (20)

вебинар - функциональное тестирование с использованием Selenium 2 и TestNG
вебинар - функциональное тестирование с использованием Selenium 2 и TestNGвебинар - функциональное тестирование с использованием Selenium 2 и TestNG
вебинар - функциональное тестирование с использованием Selenium 2 и TestNG
 
C# Desktop. Занятие 02.
C# Desktop. Занятие 02.C# Desktop. Занятие 02.
C# Desktop. Занятие 02.
 
C# Web. Занятие 04.
C# Web. Занятие 04.C# Web. Занятие 04.
C# Web. Занятие 04.
 
Индексация данных с помощью Elasticsearch и Logstash
Индексация данных с помощью Elasticsearch и LogstashИндексация данных с помощью Elasticsearch и Logstash
Индексация данных с помощью Elasticsearch и Logstash
 
Backbone js
Backbone jsBackbone js
Backbone js
 
Kozhemyakin dcm2011 1
Kozhemyakin dcm2011 1Kozhemyakin dcm2011 1
Kozhemyakin dcm2011 1
 
12 - Web-технологии. Django модели
12 - Web-технологии. Django модели12 - Web-технологии. Django модели
12 - Web-технологии. Django модели
 
C++ STL & Qt. Занятие 01.
C++ STL & Qt. Занятие 01.C++ STL & Qt. Занятие 01.
C++ STL & Qt. Занятие 01.
 
Yserver
YserverYserver
Yserver
 
#4 Иерархия классов Android SDK.pdf
#4   Иерархия классов Android SDK.pdf#4   Иерархия классов Android SDK.pdf
#4 Иерархия классов Android SDK.pdf
 
Roslyn API : SyntaxTree vs CodeDom, SemanticModel vs Reflection
Roslyn API: SyntaxTree vs CodeDom, SemanticModel vs ReflectionRoslyn API: SyntaxTree vs CodeDom, SemanticModel vs Reflection
Roslyn API : SyntaxTree vs CodeDom, SemanticModel vs Reflection
 
MongoDB - About Performance Optimization, Ivan Griga - Smart Gamma
MongoDB - About Performance Optimization, Ivan Griga - Smart GammaMongoDB - About Performance Optimization, Ivan Griga - Smart Gamma
MongoDB - About Performance Optimization, Ivan Griga - Smart Gamma
 
Влад Ковташ — Yap Database
Влад Ковташ — Yap DatabaseВлад Ковташ — Yap Database
Влад Ковташ — Yap Database
 
13 14 15_индексирование
13 14 15_индексирование13 14 15_индексирование
13 14 15_индексирование
 
C# Web. Занятие 12.
C# Web. Занятие 12.C# Web. Занятие 12.
C# Web. Занятие 12.
 
kranonitS20 Сергей Бурма. Django - легко, быстро, эффективно
kranonitS20 Сергей Бурма. Django - легко, быстро, эффективноkranonitS20 Сергей Бурма. Django - легко, быстро, эффективно
kranonitS20 Сергей Бурма. Django - легко, быстро, эффективно
 
View как чистая функция от состояния базы данных - Илья Беда, bro.agency
View как чистая функция от состояния базы данных  - Илья Беда, bro.agencyView как чистая функция от состояния базы данных  - Илья Беда, bro.agency
View как чистая функция от состояния базы данных - Илья Беда, bro.agency
 
RxJava + Retrofit
RxJava + RetrofitRxJava + Retrofit
RxJava + Retrofit
 
Apache Lucene + Hibernate = Hibernate Search
Apache Lucene + Hibernate = Hibernate SearchApache Lucene + Hibernate = Hibernate Search
Apache Lucene + Hibernate = Hibernate Search
 
Индексируй неиндексирумое
Индексируй неиндексирумоеИндексируй неиндексирумое
Индексируй неиндексирумое
 

More from Sergey Greger

Реалтзация связанных списков в CMS Plone
Реалтзация связанных списков в CMS PloneРеалтзация связанных списков в CMS Plone
Реалтзация связанных списков в CMS PloneSergey Greger
 
Встроенные Java scripts в plone 3
Встроенные Java scripts в plone 3Встроенные Java scripts в plone 3
Встроенные Java scripts в plone 3Sergey Greger
 
Разработка проекта в CMS Plone
Разработка проекта в CMS PloneРазработка проекта в CMS Plone
Разработка проекта в CMS PloneSergey Greger
 
создание пользовательских типов в Dexterity
создание пользовательских типов в Dexterityсоздание пользовательских типов в Dexterity
создание пользовательских типов в DexteritySergey Greger
 
разработка контент типа через Web
разработка контент типа  через Webразработка контент типа  через Web
разработка контент типа через WebSergey Greger
 
компоненты E learn для Plone
компоненты E learn для Ploneкомпоненты E learn для Plone
компоненты E learn для PloneSergey Greger
 
Реализация инструментальной среды семантического моделирования учебного про...
Реализация  инструментальной среды семантического  моделирования учебного про...Реализация  инструментальной среды семантического  моделирования учебного про...
Реализация инструментальной среды семантического моделирования учебного про...Sergey Greger
 

More from Sergey Greger (7)

Реалтзация связанных списков в CMS Plone
Реалтзация связанных списков в CMS PloneРеалтзация связанных списков в CMS Plone
Реалтзация связанных списков в CMS Plone
 
Встроенные Java scripts в plone 3
Встроенные Java scripts в plone 3Встроенные Java scripts в plone 3
Встроенные Java scripts в plone 3
 
Разработка проекта в CMS Plone
Разработка проекта в CMS PloneРазработка проекта в CMS Plone
Разработка проекта в CMS Plone
 
создание пользовательских типов в Dexterity
создание пользовательских типов в Dexterityсоздание пользовательских типов в Dexterity
создание пользовательских типов в Dexterity
 
разработка контент типа через Web
разработка контент типа  через Webразработка контент типа  через Web
разработка контент типа через Web
 
компоненты E learn для Plone
компоненты E learn для Ploneкомпоненты E learn для Plone
компоненты E learn для Plone
 
Реализация инструментальной среды семантического моделирования учебного про...
Реализация  инструментальной среды семантического  моделирования учебного про...Реализация  инструментальной среды семантического  моделирования учебного про...
Реализация инструментальной среды семантического моделирования учебного про...
 

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

  • 1. Поиск и индексация  Поиск и индексация – стандартные задачи.  Для решения таких задач в Zope включен специальный объект – ZCatalog.
  • 2. ZCatalog ZCatalog позволяет проводить каталогизацию и поиск:  по любым видам объектов Zope  по внешним данным: 1. реляционные данные 2. Файлы 3. веб-страницы на других сайтах
  • 3. Действие ZCatalog Объекты сайта Индексы Определяют условия отбора 1 2 3 4 Метаданные набор значений, которые будут отображаться в результирующем отчете
  • 4. ZCatalog  Объекты типа ZCatalog – специальные контейнеры  Хранят информацию о каталогизированных объектах в виде объектов –заменителей  Наборы объектов-заменителей формируютсяв индексы
  • 5. Индексы  Индексы - специализированные базы данных  Хранят информацию о объектах  Способны сохранять и очень быстро извлекать большие объемы данных.  Можете создавать индексы разного вида для сохранения различной информации о ваших объектах.
  • 6. таблица метаданных ZCatalog для отображения результатов поиска имеет специальную собственную таблицу, подобную обычной таблице реляционной базы данных – таблицу метаданных.  Для каждого каталогизируемого типа объектов можно определить набор значений, которые будут отображаться в результирующем отчете.
  • 7. таблица метаданных Для каждого значения отводится отдельный столбец таблицы. Изначально в этой таблице не установлен набор свойств для отображения, в результате мы получаем отчет в виде списка идентификаторов объекта. Свойства можно добавлять в набор и удалять из набора в форме управления каталогом
  • 8. таблица метаданных  Все объекты запроса имеют эти свойства
  • 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()  Наличие обязательно
  • 20. Получение каталогов  #получение portal_catalog  catalogtool = getToolByName(context, "portal_catalog")  #получение reference_catalog  refCatalog = getToolByName(portal, 'reference_catalog')  #получение uid_catalog  uid_catalog=getToolByName(portal, 'uid_catalog')
  • 22.  Множество индексов в portal_catalog позволяют эффективно организовать поиск
  • 23.
  • 24.
  • 25.
  • 26.
  • 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 } )
  • 44. Python Scripts results=context.portal_catalog.searchResults(p ath = { 'query': ['f11'],'level' : 2 }) for i in results: print i.getId return printed
  • 46.  Из поискового запроса необходимо получать метаданные и свойства реальных объектов  Получение обеспечивается методами объекта запроса
  • 47.  getId – id: столбец в таблице метаданных  getPath - физический путь внутри Zope.  getURL - URL текущего объекта.  getObject - ссылка на объект.  getRID - уникальный ID объекта в каталоге, меняется при каждом запросе  getИмя_метаданных –общий шаблон
  • 48. 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
  • 49. Получение ссылки на объект results = context.portal_catalog.searchResults() for result in results: object = result.getObject() print object return printed