Вторник, 29.07.2025, 08:08
Мой сайт
Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0
Форма входа
Главная » 2013 » Март » 6 » Добавление поисковой функции omnifind в приложения no
21:50
 

Добавление поисковой функции omnifind в приложения no

IBM OmniFind Enterprise Edition - это полнотекстовый корпоративный поисковый продукт, обеспечивающий отличную производительность, масштабируемость и качественные результаты поиска и поддерживающий широкий спектр источников данных. Из продуктов Lotus функция индексации и поиска OmniFind поддерживается в Lotus QuickPlace® и Lotus Domino® Document Manager, а также в базах данных Lotus Notes.

OmniFind расширяет поисковые возможности приложения по сравнению с имеющейся на сегодняшний день функциональностью Domino в нескольких важных направлениях. Во-первых, OmniFind может осуществлять поиск за пределами Domino - в Интернете, по файловым системам, реляционным базам данных, а также по почтовым системам и системам управления документами других производителей. Удобство работы пользователя с поисковой системой можно улучшить за счет передовых поисковых возможностей OmniFind, например, при помощи средств проверки орфографии, функций автореферата, быстрых ссылок, показа структуры сайта и многого другого. OmniFind может улучшить производительность серверов Domino, взяв на себя полнотекстовое индексирование и выполнение поисковых операций. OmniFind - это настоящий продукт уровня предприятия, поддерживающий до 20 миллионов документов.

Возможно, вы уже приобрели OmniFind и обнаружили, как быстро и легко можно создать индекс и начать поиск. Вы также могли обнаружить, что клиентские поисковые приложения, предоставляемые OmniFind, основаны на J2EE и предназначены для запуска в среде сервера приложений J2EE, например IBM WebSphere®. Это удобно, если доступ осуществляется через Web-браузер, однако возможно, что конечные пользователи для доступа к Domino используют исключительно клиент Notes. В этом случае читайте статью далее и узнайте, как добавить поисковую функциональность к стандартным приложениям Lotus Notes.

Важным аспектом такого решения является взаимосвязь OmniFind и Domino. Процессы OmniFind работают отдельно от Domino. Поэтому желательно, а чаще всего - рекомендуется запускать OmniFind на собственном выделенном сервере. Это гарантирует возможность работы с потенциально большим количеством подлежащих индексированию корпоративных документов, а также снимает с Domino нагрузку на полнотекстовое индексирование и поиск. Топография серверов и клиентов Notes проиллюстрирована на рисунке 1.


Рисунок 1. Топография приложения OmniFind Notes
Топография приложения OmniFind Notes

OmniFind установлен на отдельном сервере и настроен на просмотр и индексирование одной или нескольких баз данных Notes в конкретном домене Domino. Эти базы данных доступны для поиска через поисковый индекс OmniFind. Это показано в нижнем левом углу рисунка 1. Важно отметить, что пользователь осуществляет поиск не по первоначальным данным Notes, а по поисковому индексу OmniFind, в котором может содержаться другая информация, собранная на предприятии (например, из Интернета, файловых систем и т. д.)

Наше поисковое приложение OmniFind спроектировано как стандартная база данных Notes с именем OmniFind.nsf. Это показано в верхнем левом углу рисунка 1. OmniFind.nsf состоит из двух форм:

  • Первая форма позволяет определить, какая система OmniFind должна использоваться для поиска (подробнее это будет описано позже).
  • Вторая форма представляет собой собственно поисковую форму, используемую для передачи запросов и отображения результатов поиска. Дополняющий поисковую форму LotusScript отвечает за вызов SIAPI. SIAPI взаимодействует с OmniFind, используя параметры настройки, заданные в первой конфигурационной форме

На рисунке 2 представлена экранная копия поискового приложения OmniFind. На панели содержания слева имеются 3 опции. Опция OmniFind Settings отсылает к конфигурационной форме, показанной на рисунке 3. Здесь мы вводим имя хоста и номер порта сервера OmniFind, а также идентификатор пользователя и пароль, если на сервере OmniFind включены функции безопасности. Также необходимы идентификаторы приложения и коллекции (Application Id и Collection Id). Для простоты данное конкретное решение выполняет поиск только по одной коллекции OmniFind, в соответствии с назначенным идентификатором коллекции. В одной коллекции OmniFind могут содержаться документы из многих баз данных Notes и других источников. Естественным усовершенствованием такого решения была бы реализация, позволяющая пользователю выбирать из списка коллекций ту, поиск по которой он хочет выполнить. Кнопка Test Connection позволяет связываться с сервером OmniFind с использованием введенных параметров. При этом выводится сообщение об успешном или неуспешном соединении.


Figure 2. Приложение OmniFind Notes
Приложение OmniFind Notes

Опция Saved Searches предоставляет список ранее выполненных запросов и их результатов. Это высоко востребованная в стандартном поисковом приложении функция, которая с легкостью обеспечивается внутренним устройством Notes. Поскольку поисковая форма - это всего лишь форма Lotus Notes, пользователь получает возможность сохранить ее экземпляр как документ внутри базы данных OmniFind.nsf. В представлении базы данных этих поисковых форм могут указываться автор запроса, время и дата его выполнения, а также использованные в запросе ключевые слова. Если база данных OmniFind.nsf размещена на сервере Domino, то возможно совместное использование сохраненных запросов, что потенциально исключает необходимость вообще обращаться к поиску.

Опция Start Searching на панели содержания вызывает поисковую форму. На рисунке 2 в нижнем правом углу показан экземпляр поисковой формы. Форма состоит из двух частей. Верхняя часть представляет собой поле редактирования, в которое пользователи вводят критерии поиска, а рядом расположена кнопка Search, выполняющая поиск. Результаты отображаются в нижней части формы под горизонтальной полосой. На каждой странице выводится по десять результатов, поэтому на странице имеются также кнопки "назад" и "вперед" для перемещения по разным страницам с результатами.


Figure 3. Форма параметров OmniFind
Форма параметров OmniFind

Примечание: данное приложение тестировалось на Lotus Notes V6.0.

Предполагается, что продукт OmniFind уже установлен на отдельном сервере и сконфигурирован при помощи коллекции для поиска (индекса). Такая коллекция может содержать документы, извлеченные из любого поддерживаемого источника. Однако в настоящее время наш пример приложения OmniFind может отображать только значки, представляющие результаты поиска по Lotus Notes и документам файловой системы. Это ограничение касается лишь визуального отображения типа результатов поиска. При желании можете добавить другие значки, представляющие те или другие источники данных.

Установка поискового приложения OmniFind представляет собой двухступенчатый процесс.

  1. Загрузите базу данных OmniFind.nsf из раздела Загрузка данной статьи и скопируйте ее в каталог данных вашего каталога Domino.
  2. Скопируйте файлы esapi.jar и siapi.jar из каталога OmniFind <каталог установки>/lib в <каталог установки Domino>/jvm/ext

В примере приложения OmniFind для вызова IBM Search и Index API (SIAPI) используется LotusScript. Файлы esapi.jar и siapi.jar должны находиться в каталоге jvm/ext, чтобы Domino мог получить к ним доступ.

Для проверки правильности установки нужно просто подключиться к базе данных OmniFind.nsf с помощью клиента Notes, заполнить форму параметров OmniFind, а затем выполнить несколько поисковых запросов с помощью поисковой формы. Полезно нажать кнопку Test Connection в форме параметров для проверки правильности настроек. Типичная ошибка - не указать правильные идентификатор коллекции, имя хоста или номер порта. Идентификатор приложения по умолчанию должен иметь значение Default.

Прежде чем перейти к ознакомлению с процессом вызова SIAPI непосредственно из LotusScript, стоит проанализировать простой пример поиска с использованием SIAPI только на Java. Таким образом, можно увидеть, что необходимо для выполнения поиска посредством SIAPI. После ознакомления с этими требованиям остается всего лишь выполнить аналогичные вызовы на LotusScript с помощью интерфейса LotusScript-to-Java. В листинге 1 показан сокращенный пример кода поиска SIAPI.


Листинг 1. Примеры SIAPI на Java
// создаем допустимый Application ID, который будет использоваться // Search Node для авторизации доступа к коллекции ApplicationInfo appinfo = factory.createApplicationInfo(applicationName); appinfo.setPassword(applicationPassword); // создаем новый объект Properties. Properties config = new Properties(); config.setProperty("hostname", "OmniFindHostName"); config.setProperty("port", "80"); config.setProperty("timeout", "60"); config.setProperty("username", "websphereUser"); config.setProperty("password", "webspherePassword"); // получаем специфическую для OmniFind реализацию SIAPI Search factory SearchFactory factory = (SearchFactory) Class.forName("com.ibm.es.api.search.RemoteSearchFactory").newInstance(); // получаем реализацию Search Service SearchService searchService = factory.getSearchService(config); // помещаем объект Searchable в заданный ID коллекции Searchable searchable = null; try { searchable = searchService.getSearchable(appinfo, collectionId); } catch (SiapiException e) {return;} // создаем новый объект Query с помощью заданной строки запроса Query q = factory.createQuery("search terms go here"); // выполняем поиск. Будет возвращен объект ResultSet ResultSet rset = null; try { rset = searchable.search(q); } catch (SiapiException e) { return; } Result r[] = rset.getResults(); for (int k = 0; k < r.length; k++) { System.out.println("Result " + k + ": " + r[k].getDocumentID()); }

Сначала мы создаем объект ApplicationInfo, который используется для распознавания программы в OmniFind. Администратор OmniFind может разрешить программе осуществлять поиск либо по всем коллекциям, либо по определенному их набору.

Затем создается объект Properties с информацией о соединении с сервером OmniFind. Этот объект Properties используется для вызова getSearchService, чтобы установить реальное соединение с сервером OmniFind. Обратите внимание, что для получения реализации OmniFind сначала надо создать экземпляр search factory.

Получив объект SearchService, можно получить один или несколько поисковых объектов, каждый из которых ассоциируется с авторизованной коллекцией, по которой может осуществляться поиск. В этом случае мы получаем единственный поисковый объект.

Затем мы создаем объект запроса для фразы, которую мы ищем. Ваша формулировка запроса создаётся именно с помощью вызова createQuery.

Теперь мы готовы запустить поиск с помощью поискового метода поискового объекта, передавая ему ранее созданный объект запроса. Вызов выполняет поиск и возвращает объект набора результатов SIAPI. Отдельные результаты возвращаются в виде массива результатов с помощью вызова getResults. Существует множество методов доступа для различных атрибутов отдельного результата, например получение идентификатора документа, заголовка и/или URL-адреса.

В оставшейся части статьи детально описывается использование LotusScript в OmniFind.nsf. После изучения основ вызова SIAPI из LotusScript вы сможете самостоятельно написать продвинутое поисковое приложение OmniFind Notes.

Когда пользователь вводит в поисковую форму запрос и нажимает на кнопку поиска, управление переходит к библиотеке RunSearch LotusScript. Функция RunSearch отвечает за вызов SIAPI для выполнения поиска и обработки результатов.


Рисунок 4. Редактирование LotusScript с помощью Domino Designer
Редактирование LotusScript с помощью Domino Designer

Предполагается, что читатель уже знаком с LotusScript и знает, как использовать Domino Designer для изменения LotusScript. На рисунке 4 показан проект OmniFind.nsf, открытый в Domino Designer. Если развернуть элемент Forms, вы увидите две наших формы с названиями search и settings. Элемент Shared Code/Script Libraries также разворачивается, показывая две функции, а именно ReplaceSubstring и RunSearch. Функция ReplaceSubstring представляет собой сервисную программу, но в этой статье мы ее не рассматриваем, с ней можно ознакомиться в свободное время. Гораздо большую ценность представляет функция RunSearch, расположенная в правом окне. Ниже мы рассмотрим её более подробно:

Большинство переменных, используемых в RunSearch, описываются в самом начале функции.

За исключением SiapiResults, описываемой как Variant, следующие объекты SIAPI описываются либо как JavaClass, либо как JavaMethod, либо как JavaObjects, в соответствии с интерфейсом LotusScript-to-Java.


Листинг 2. Описания объектов SIAPI
Dim SiapiImplClass As JavaClass Dim SiapiFactoryObject As JavaObject Dim SiapiImplMethod As JavaMethod Dim SiapiAppInfoObject As JavaObject Dim SiapiSearchServiceObject As JavaObject Dim SiapiSearchableObject As JavaObject Dim SiapiQueryObject As JavaObject Dim SiapiResultSetObject As JavaObject Dim SiapiResultObject As JavaObject Dim SiapiResults As Variant

Ниже перечислены несколько необходимых собственных объектов Java:


Листинг 3. Описания объектов Java
Dim JavaPropertiesClass As JavaClass Dim JavaPropertiesObject As JavaObject Dim JavaPropertiesMethod As JavaMethod Dim JavaDate As JavaObject

Остальные описания переменных служат для поддержки операций с документами Notes и общих строковых переменных.

С точки зрения процедуры, первый шаг состоит в чтении документа параметров для получения информации по текущему соединению OmniFind. Позже эта информация будет использоваться для создания объекта Java Properties. Обратите внимание, что эту процедуру можно выполнять всего один раз во время инициализации.


Листинг 4. Извлечение параметров OmniFind
Set curdb = notesSession.CurrentDatabase Set view=curdb.GetView("Settings") Set doc = view.GetDocumentByKey("Settings", True) ApplicationID = doc.GetItemValue("ApplicationID") (0) User = doc.GetItemValue("User") (0) Password = doc.GetItemValue("Password") (0) Host = doc.GetItemValue("Host") (0) Port = doc.GetItemValue("Port") (0) CollectionID = doc.GetItemValue("CollectionID") (0)

Следующее выражение очень важно, оно отвечает за установление сеанса Java между LotusScript и JVM.


Листинг 5. Установление сеанса Java
Set javaSession = New JavaSession()

Как и в примере SIAPI Java, первым шагом для SIAPI является получение factory-объекта для реализации OmniFind. Для этого необходимо сначала получить класс SiapiSearchImpl из сеанса Java, далее получить метод SearchFactory из этого класса, а затем вызвать этот метод для получения реального factory-объекта, как показано ниже:


Листинг 6. Получение factory-объекта OmniFind
Set SiapiImplClass = javaSession.GetClass("com/ibm/siapi/search/SiapiSearchImpl") Set SiapiImplMethod = SiapiImplClass.GetMethod ("createSearchFactory","(Ljava/lang/String ;) Lcom/ibm/siapi/search/SearchFactory;") Set SiapiFactoryObject = SiapiImplMethod.invoke (,"com.ibm.es.api.search.RemoteSearchFactory")

Получив factory-объект, можно создать объект OmniFind Application Info, который будет управлять теми коллекциями, по которым приложение сможет проводить поиск. Вам необходимо получить соответствующий идентификатор приложения у администратора OmniFind. Значение по умолчанию - "Default".


Листинг 7. Получение объекта идентификатора приложения
Set SiapiAppInfoObject = SiapiFactoryObject.createApplicationInfo(ApplicationID)

Далее необходимо создать объект Java Properties и инициализировать его, используя соответствующую информацию о соединении OmniFind, полученную из документа параметров. Как и при получении factory-объекта нужно запросить класс в сеансе Java и извлечь из него метод setProperty. Свойства имени пользователя и пароля необходимы лишь в том случае, если включена функция безопасности OmniFind. Ниже представлены необходимые вызовы:


Листинг 8. Создание объекта свойств Java
Set JavaPropertiesClass = javaSession.GetClass("java/util/Properties") Set JavaPropertiesObject = JavaPropertiesClass.CreateObject() Set JavaPropertiesMethod = JavaPropertiesClass.GetMethod ("setProperty","(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/Object;") Call JavaPropertiesMethod.invoke(JavaPropertiesObject,"hostname",Host) Call JavaPropertiesMethod.invoke(JavaPropertiesObject,"port",Port) Call JavaPropertiesMethod.invoke(JavaPropertiesObject,"timeout","60") Call JavaPropertiesMethod.invoke(JavaPropertiesObject,"username",User) Call JavaPropertiesMethod.invoke(JavaPropertiesObject,"password",Password)

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


Листинг 9. Извлечение поискового объекта OmniFind
Set SiapiSearchServiceObject = SiapiFactoryObject.getSearchService(JavaPropertiesObject) Set SiapiSearchableObject = SiapiSearchServiceObject.getSearchable (SiapiAppInfoObject,CollectionID)

Мы практически готовы запустить поиск. Но прежде необходимо создать объект SIAPI Query, состоящий из поисковой строки и других параметров, введённых пользователем. Для получения этой информации из текущей поисковой формы я использую стандартные методы документов Notes. Ниже показан процесс создания объекта запроса SIAPI и установки их параметров.


Листинг 10. Создание объекта запроса SIAPI
Set SiapiQueryObject = SiapiFactoryObject.createQuery(searchExpression) Call SiapiQueryObject.setQueryLanguage("en_US") resultStart = (pgSize * pageNum) - pgSize Call SiapiQueryObject.setRequestedResultRange(resultStart,pgSize)

OmniFind позволяет выводить результаты по одной странице за раз. Размер страницы определяете вы сами. Нужная вам страница обозначена начальным номером результата. Например, если размер страницы равен десяти, можно запросить третью страницу, начинающуюся с результата под номером 20 (0 - 9 = первая страница, 10 - 19 = вторая страница, 20 - 29 = третья страница и т. д.)

Поисковый метод поискового объекта выполняет поиск и возвращает объект набора результатов SIAPI, как показано ниже:


Листинг 11. Запуск поиска
Set SiapiResultSetObject = SiapiSearchableObject.search(SiapiQueryObject)

Приведённый ниже код находится в функции RunSearch, но показан вне контекста, чтобы продемонстрировать, как можно просмотреть результаты поиска и извлечь соответствующую информацию о каждом конкретном результате с помощью SIAPI. После извлечения полученной информации в стандартные строковые переменные LotusScript вы сможете отформатировать и отобразить результаты поиска, используя уже знакомые вам стандартные функциональные возможности Notes.


Листинг 12. Обработка результатов поиска
numResults = SiapiResultSetObject.getAvailableNumberOfResults() SiapiResults = SiapiResultSetObject.getResults() Forall vResult In SiapiResults Set SiapiResultObject = vResult resultScore = SiapiResultObject.getScore() resultTitle = SiapiResultObject.getTitle() resultDesc = SiapiResultObject.getDescription() resultURL = SiapiResultObject.getDocumentID() resultSource = SiapiResultObject.getDocumentSource() Set JavaDate = SiapiResultObject.getDate() resultDate = JavaDate.toLocaleString() End Forall

Для получения дополнительной информации о доступных методах для объекта SIAPI Result обратитесь к Руководству по программированию OmniFind.

В последней части статьи вкратце описываются приемы, используемые функцией RunSearch для отображения результатов поиска в виде HTML. Результаты в формате HTML не зависят от SIAPI или OmniFind, скорее это выбор в пользу более удобной визуализации. В этом плане HTML обладает большей гибкостью в презентации материала (например, возможно выделение маркером отдельных терминов из запроса в авторефератах), а также больше похож на пример Web-приложения на основе OmniFind.

Этот подход состоит в основном в создании строки, содержащей весь HTML для отображения. После создания строки она записывается как поток Notes в поле "results" поисковой формы. Сам поток записывается как MIME-документ из нескольких частей, причём тип MIME устанавливается как text, а кодировка не указывается.

В первой части MIME-документа содержится сама строка HTML, а в двух следующих - изображения иконок в формате GIF, на которые ссылается HTML. Сами рисунки GIF определяются в разделе Initialize функции RunSearch.

Поделиться...

В данной статье продемонстрирован порядок добавления поисковой функции OmniFind к традиционным приложениям Notes с доступом из клиента Notes. В частности, я показал, как вызывать IBM Java Search and Indexing API (SIAPI) непосредственно из LotusScript. Кроме того, в статье показан процесс отображения результатов поиска в виде стандартных текстовых полей, а также как можно отобразить результаты поиска в HTML из клиента Notes, что в значительной степени улучшает внешний вид и удобство пользования поисковым интерфейсом.

С полученными базовыми знаниями вы можете улучшить свои приложения Notes, добавив в них функциональность OmniFind, превосходящую на сегодняшний день возможности Domino. Использование OmniFind даёт следующие преимущества:

  • OmniFind может осуществлять поиск за пределами Domino - в Интернете, по файловым системам, реляционным базам данных, а также по почтовым системам и системам управления документами других производителей.
  • Расширенные поисковые возможности OmniFind позволяют повысить удобство работы пользователя.
  • OmniFind может улучшить производительность серверов Domino, взяв на себя нагрузку по полнотекстовому индексированию и выполнению поисковых операций.
  • Наконец, OmniFind - это продукт уровня предприятия, поддерживающий до 20 миллионов документов.

ОписаниеИмяРазмерМетод загрузкиSample OmniFind Notes ApplicationOmniFind.nsf1.42MBHTTP

Научиться

  • Оригинал статьи: Add OmniFind search to Notes applications (EN).

  • Концепции простого семантического поиска (developerWorks, апрель 2007 г.): прочтите введение в "простой семантический поиск" и узнайте на простом примере, как реализовать эту функциональность (EN).

  • Страница IBM OmniFind на developerWorks: здесь можно найти ссылки на статьи и руководства и получить ресурсы, необходимые для усовершенствования практических навыков работы с IBM OmniFind.(EN)

  • Enterprise Search: подробная информация по решению задач, связанных с корпоративным поиском и доступом к информации.(EN)

  • IBM OmniFind Enterprise Edition V8.4: Programming Guide and API Reference for Enterprise Search (SC18-9284-03): руководство по использованию Java API, поставляемых с Enterprise Search.(EN)

  • Книги по этой и другим техническим темам можно найти в книжном магазине Safari.(EN)

Получить продукты и технологии

  • Загрузите IBM OmniFind Yahoo! edition и опробуйте бесплатную версию OmniFind.(EN)

  • Загрузите ознакомительные версии продуктов IBM и опробуйте инструменты разработки приложений и связующее ПО IBM семейств DB2®, Lotus®, Rational®, Tivoli®, и WebSphere®.(EN)

Обсудить

В настоящий момент Тодд Лейба - популяризатор Discovery and Search Analytics в подразделении IBM Information Management. Он является ведущим представителем, отвечающим за установление контактов с клиентами, партнерами, разработчиками и за разъяснение им стратегии IBM Discovery and Search. В его обязанности также входит учет последних рыночных тенденций, а также откликов заказчиков и разработчиков при планировании новых направлений в разработке продуктов IBM. В компетенцию Тодда Лейба входит архитектура полнотекстового поиска, информационно-поисковые системы и их применение в бизнесе. Ранее Тодд Лейба принимал участие в различных проектах, связанных с поисковыми функциями. В частности, он работал над продуктом IBM WebSphere Enterprise Search (OmniFind), обеспечивающим отличную производительность, масштабируемость и качественные результаты поиска и поддерживающим широкий спектр источников данных.

Помощь по сообщениям о нарушениях

Спасибо. Эта запись была помечена для модератора.

Помощь по сообщениям о нарушениях

Сообщение о нарушении не было отправлено. Попробуйте, пожалуйста, позже.

developerWorks: вход

При первом входе в developerWorks для Вас будет создан профиль. Выберите информацию отображаемую в Вашем профиле — скрыть или отобразить поля можно в любой момент.

Вся введенная информация защищена.

Выберите ваше отображаемое имя

При первом входе в developerWorks для Вас будет создан профиль и Вам нужно будет выбрать Отображаемое имя. Оно будет выводиться рядом с контентом, опубликованным Вами в developerWorks.

Отображаемое имя должно иметь длину от 3 символов до 31 символа. Ваше Имя в системе должно быть уникальным. В качестве имени по соображениям приватности нельзя использовать контактный e-mail.

Вся введенная информация защищена.

SITE_ID=40

Zone=Information Management, Lotus, Технология Java

ArticleID=287155

ArticleTitle=Добавление поисковой функции OmniFind в приложения Notes

publish-date=02062008

Просмотров: 2921 | Добавил: betiould | Рейтинг: 0.0/0
Всего комментариев: 0
Поиск
Календарь
«  Март 2013  »
Пн Вт Ср Чт Пт Сб Вс
    123
45678910
11121314151617
18192021222324
25262728293031
Архив записей
Друзья сайта
  • Официальный блог
  • Сообщество uCoz
  • FAQ по системе
  • Инструкции для uCoz

  • Copyright MyCorp © 2025Сделать бесплатный сайт с uCoz