Сравнение версий
Ключ
- Эта строка добавлена.
- Эта строка удалена.
- Изменено форматирование.
Информация | ||
---|---|---|
| ||
Корневой элемент beans. Пространство имен: <beans lxmlns="http://www.springframework.org/schema/beans"> |
Информация | ||||||
---|---|---|---|---|---|---|
| ||||||
<?xml version="1.0" encoding="UTF-8" ?>
<beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:c="http://www.springframework.org/schema/c"
xmlns="http://www.springframework.org/schema/beans"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<!-- {Модуль} -->
<bean id="newModuleSearcher" class="ru.intertrust.cm_sochi.srv.connector.sochi.search.SochiSolrSearcher">
<constructor-arg name="cmAppSystemId" value="{Module}"/>
<constructor-arg name="isNamed" value="true"/>
<constructor-arg name="searchArea" value="{Module}"/>
<constructor-arg name="targetCollectionName" value="(search)"/>
<constructor-arg>
<bean class="ru.intertrust.cm_sochi.srv.connector.sochi.search.InternalDocsSearchFilterCreator"/>
</constructor-arg>
<constructor-arg>
<bean class="ru.intertrust.cmj.af.search.dp.docinfo.CustomModuleInfoExtractor" c:messageSource-ref="cmj_af_search_messageSource" c:ident="{Module}"/>
</constructor-arg>
</bean>
<!-- Модуль end-->
<!-- {Модуль} -->
<!-- Иерархия билдеров областей поиска -->
<bean id="rootScopeBuilder" class="ru.intertrust.cmj.af.search.ScopeTreeBuilder">
<property name="childs">
<list>
<!-- {Модуль} -->
<bean class="ru.intertrust.cmj.af.search.dp.CmDocTypesScopeBuilder">
<constructor-arg index="0" value="{module}"/>
<constructor-arg index="1" value="{Module}"/>
<constructor-arg index="2">
<list>
<ref bean="subject"/>
</list>
</constructor-arg>
<constructor-arg index="3">
<set>
<ref bean="rkkInternalBundle"/>
<ref bean="resolutionBundle"/>
<ref bean="reportBundle"/>
<ref bean="mainDocBundleForCustom"/>
</set>
</constructor-arg>
<constructor-arg index="4">
<list>
<ref bean="{Module}Searcher"/>
</list>
</constructor-arg>
<constructor-arg index="5">
<ref bean="cmSearchScopeCompositExBuilder"/>
</constructor-arg>
</bean>
<!-- {Модуль} end-->
</list>
</property>
</bean>
<!-- Иерархия билдеров простого поиска -->
<bean id="rootScopeBuilderSimple" class="ru.intertrust.cmj.af.search.ScopeTreeBuilder">
<property name="childs">
<list>
<!-- {Модуль} -->
<bean class="ru.intertrust.cmj.af.search.dp.CmDocTypesScopeBuilder">
<constructor-arg index="0" value="{module}"/>
<constructor-arg index="1" value="{Module}"/>
<constructor-arg index="2">
<list>
<ref bean="subject"/>
</list>
</constructor-arg>
<constructor-arg index="3">
<set>
<ref bean="mainDocBundleSimple"/>
</set>
</constructor-arg>
<constructor-arg index="4">
<list>
<ref bean="{Module}Searcher"/>
</list>
</constructor-arg>
<constructor-arg index="5">
<ref bean="cmSearchScopeCompositExBuilder"/>
</constructor-arg>
</bean>
<!-- {Модуль} end-->
</list>
</property>
</bean>
<!-- Иерархия билдеров однострочного поиска. Однострочный поиск повторяет структуру расширенного поиска, но урезан по бандлам -->
<bean id="oneLineRootScopeBuilder" class="ru.intertrust.cmj.af.search.ScopeTreeBuilder">
<property name="childs">
<list>
<!-- {Модуль} -->
<bean class="ru.intertrust.cmj.af.search.dp.CmDocTypesScopeBuilder">
<constructor-arg index="0" value="{module}"/>
<constructor-arg index="1" value="{Module}"/>
<constructor-arg index="2">
<list>
<ref bean="subject"/>
</list>
</constructor-arg>
<constructor-arg index="3">
<set>
<ref bean="mainDocBundleOneLine"/>
</set>
</constructor-arg>
<constructor-arg index="4">
<list>
<ref bean="{Module}Searcher"/>
</list>
</constructor-arg>
<constructor-arg index="5">
<ref bean="cmSearchScopeCompositExBuilder"/>
</constructor-arg>
</bean>
<!-- {Модуль} end-->
</list>
</property>
</bean>
<!-- Конфигурация параметров запроса ({Модуль}) -->
<bean id="dominoRequestConfig{Module}" parent="dominoRequestConfigSuper">
<!-- Отображение ID параметров запроса на поля notes документа -->
<property name="nsFieldsByParamByBundleID">
<map merge="true">
<entry key="rkk#regDate" value="outdate"/>
<entry key="rkk#addressees" value="To"/>
<entry key="rkk#signer" value="UserFrom"/>
<entry key="rkk#executor" value="Mast"/>
<entry key="resolution#regDate" value="outdate"/>
<entry key="mainDoc#regDate" value="outdate"/>
<entry key="mainDoc#signer" value="UserFrom"/>
<entry key="mainDoc#docDate" value="outdate"/>
<entry key="mainDoc#docDateSimple" value="outdate"/>
<entry key="report#regDate" value="outdate"/>
</map>
</property>
<!-- Отображение ID бандла на имя формы notes документа -->
<property name="formsByBundleID">
<map merge="true">
<entry key="rkk" value="Input"/>
<entry key="mainDoc" value="Input"/>
</map>
</property>
</bean>
<!--Параметры сортировки результатов поиска ({Модуль}) -->
<bean id="sortingParams{Module}Date" class="ru.intertrust.cmj.af.search.dp.docinfo.SortingParams">
<property name="columnName" value="regDate"/>
<property name="sortingFieldType" value="String"/>
<property name="default" value="true"/>
<property name="defaultSortingDirection" value="descendant"/>
<property name="sortingDirections">
<set>
<value>descendant</value>
<value>ascendant</value>
</set>
</property>
</bean>
<!-- Конфигурация отображения результатов поиска ({Модуль}) -->
<bean id="moduleExtractorConfig{Module}" parent="moduleExtractorConfigSuper">
<!-- Отображение формы документа на имя корневого типа -->
<property name="rootTypesByBundleID">
<map merge="true">
<entry key="rkk" value="rkk-search-result"/>
</map>
</property>
<!-- Отображение имя формы notes документа на ID бандла -->
<property name="bundleIDsByForm">
<map merge="true">
<entry key="Input" value="rkk"/>
</map>
</property>
<property name="nsFieldsByClTypeByBundleID">
<map merge="true">
<entry key="rkk#regDate" value="outdate"/>
<entry key="rkk#to" value="S"/>
<entry key="rkk#from" value="S2"/>
<entry key="mainDoc#regDate" value="outdate"/>
<entry key="mainDoc#signer" value="S2"/>
</map>
</property>
<property name="formulasByClTypeByBundleID">
<map merge="true">
<entry key="rkk#hasAttachments" value="doc.getItemValueString('IsHasContent').trim() == '1'"/>
<entry key="rkk#id" value="ctx.getString('Links_DocReplID').trim() == '' ? '' : (ctx.getString('Links_DocReplID').trim() + ':' + ctx.getString('Links_DocUNID').trim())"/>
</map>
</property>
</bean>
</beans> В настройках поиска указывается конфигурация, в которой задаются атрибуты поиска, алгоритм обработки результатов их вывод | ||||||
Блок кода | ||||||
| ||||||
applicationContext-config-search.xml задаются параметры поиска, конфигация формы поиска, алгоритм обработки результатов и их вывод |
Свойства страницы | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
Описание взаимодействия конфигураций в настройке поиска
Image Added
панель | |
---|---|
|
Варианты поиска
Простой поиск
Блок кода | ||
---|---|---|
| ||
<bean id="dpQueryFormSimple_custom" class="ru.intertrust.cmj.af.search.dp.CmQueryForm" c:scopeBuilder-ref="rootScopeBuilderSimple"/> |
Расширенный поиск
Блок кода | ||
---|---|---|
| ||
<bean id="dpQueryForm_custom" class="ru.intertrust.cmj.af.search.dp.CmQueryForm" c:scopeBuilder-ref="rootScopeBuilder"/> |
Однострочный поиск
Блок кода | ||
---|---|---|
| ||
<bean id="dpQueryFormOneLine_custom" class="ru.intertrust.cmj.af.search.dp.CmQueryForm" c:scopeBuilder-ref="oneLineRootScopeBuilder"/> |
Расширенный поиск по связям
Блок кода | ||
---|---|---|
| ||
<bean id="dpQueryFormAdvansedForLinks_custom" class="ru.intertrust.cmj.af.search.dp.CmQueryForm" c:scopeBuilder-ref="rootScopeBuilderLinks"/> |
Простой поиск по связям
Блок кода | ||
---|---|---|
| ||
<bean id="dpQueryFormSimpleForLinks_custom" class="ru.intertrust.cmj.af.search.dp.CmQueryForm" c:scopeBuilder-ref="rootScopeBuilderSimple"/> |
Блок кода | ||
---|---|---|
| ||
<bean id="singleLineSearchSettings" class="ru.intertrust.cmj.rest.search.SingleLineSearchSettings">
<constructor-arg name="queryFormId" value="dpQueryFormOneLine_custom"/>
<constructor-arg name="regNumParameter" value="regNumberExact"/>
<constructor-arg name="searchOnEverywhereParameter" value="searchOnEverywhere"/>
<constructor-arg name="resultParamMapping">
<map>
<entry key="regNumberExact" value="regFullNumber"/>
</map>
</constructor-arg>
</bean>
<bean id="ddpQueryFormSimpleominoDocumentSearchResultItemFactory" class="ru.intertrust.cmj.af.search.dp.DocumentSearchResultItemFactory" />
<!-- Контекстный поиск -->
<bean id="dpQueryFormContextual_custom" class="ru.intertrust.cmj.af.search.dp.CmQueryFormTunable"
c:scopeBuilder-ref="contextualSearchRootScopeBuilder">
<description>Потребители поискового механизма должны получать из
спринг-контекста данный бин, а остальные бины через его св-ва
</description>
</bean> |
Иерархия билдеров областей поиска
Иерархия билдеров задается в бине rootScopeBuilder в свойстве childs.
Пример, настройка области поиска «Договоры»:
Блок кода | ||
---|---|---|
| ||
<bean class="ru.intertrust.cmj.af.search.dp.CmDocTypesScopeBuilder">
<constructor-arg name="idPrefix" value="contracts" />
<constructor-arg name="systemId" value="ContractsLite" />
<constructor-arg name="params">
<list>
<ref local="subject" />
</list>
</constructor-arg>
<constructor-arg name="bundles">
<set>
<ref local="rkkContractsBundle" />
<ref local="addAgrBundle" />
<ref local="docToContractBundle" />
<ref local="financeBundle" />
<ref local="resolutionBundle" />
<ref local="reportBundle" />
<ref local="mainDocBundle" />
</set>
</constructor-arg>
<constructor-arg name="searchers">
<list>
<ref local="contractsSearcher" />
<ref local="contractsArc" />
</list>
</constructor-arg>
<constructor-arg name="builder">
<ref local="cmSearchScopeCompositExBuilder" />
</constructor-arg>
</bean> |
Для формирования скоупа в класс билдера передаются парамтеры:
- Уникальный префикс для идентификатора области. Должен быть уникальным в рамках иерархии областей одной;
<constructor-arg name="idPrefix" value="contracts" /> - Идентификатор БД;
<constructor-arg name="systemId" value="ContractsLite" - Параметры дефолтного бандла. Обычно указывается один параметр – subject.
<ref local="subject" /> - Набор бандлов
<constructor-arg name="bundles"> … - Набор поисковиков
<constructor-arg name="searchers"> …
Данная настройка используется при формировании полнотекстового запроса к Domino БД. Настройка задается в бинах наследниках класса ru.intertrust.cmj.af.search.dp.request.DominoRequestConfig. id бина задается по правилу: «dominoRequestConfig»+ключ модуля (см. 3) в 3.2.4). Например, dominoRequestConfigInputDocs :
Блок кода | ||
---|---|---|
| ||
<!-- Конфигурация параметров запроса (ВхД) -->
<bean id="dominoRequestConfigInputDocs" parent="dominoRequestConfigSuper">
<!-- Отображение ID параметров запроса на поля notes документа -->
<property name="nsFieldsByParamByBundleID">
<map merge="true">
<entry key="rkk#regDate" value="rdate" />
<entry key="rkk#docDate" value="outdate" />
<entry key="rkk#correspondent" value="UserFrom#From" />
<entry key="rkk#docNumber" value="OutNumber" />
<entry key="rkk#corrExecutor" value="Mast" />
</map>
</property>
<!-- Отображение ID бандла на имя формы notes документа -->
<property name="formsByBundleID">
<map merge="true">
<entry key="rkk" value="Input" />
<entry key="mainDoc" value="Input" />
</map>
</property>
</bean> |
- <property name="nsFieldsByParamByBundleID"> - карта соответствий «параметр-> notes-поле». Ключ элемента карты имеет формат: id бандла# id параметра. Например, key="rkk#regDate". Значение элемента карты в простом случае представляет собой имя соотв. Notes-поля, которое участвует в формировании строки поиска в Domino. Например, value="rdate". Далее рассмотрим следующие случаи:
- Параметр с типом vcard (сотрудник) и в Domino идет поиск не только по открытому имени сотрудника, но и по названию организации сотрудника. В этом случае в поисковом запросе нужно указать два поля – поле, в котором хранится имя сотрудника, и поле с названием организации. Оба поля передаются в формате: поле сотрудника # поле организации. Например, value="UserFrom#From". Запрос по параметру будет выглядеть следующим образом:
([UserFrom]="Петров В. А." AND [From]="Руднев-Шиляев")). - Случай, когда для одного параметра необходимо выполнить поиск по двум полям. В данном случае в поисковом запросе используется оператор ИЛИ. Оба поля передаются в формате: поле1% поле2. Например,
value="Executor%execpeoples#ORGANISATIONNAME".
Запрос по параметру будет выглядеть следующим образом:
(([Executor]=" Петров В. А." OR ([execpeoples]=" Петров В. А." AND [ORGANISATIONNAME]="Руднев-Шиляев"))).
- Параметр с типом vcard (сотрудник) и в Domino идет поиск не только по открытому имени сотрудника, но и по названию организации сотрудника. В этом случае в поисковом запросе нужно указать два поля – поле, в котором хранится имя сотрудника, и поле с названием организации. Оба поля передаются в формате: поле сотрудника # поле организации. Например, value="UserFrom#From". Запрос по параметру будет выглядеть следующим образом:
- property name="nsFieldsByParamByBundleID"> - карта соответствий «параметр-> формула». Ключ элемента карты имеет такой же формат, который описан в п. 1). Значение элемента карты представляет собой выражение для FT-запроса. Например, <entry key="rkk#isControl" value="[ExtContr_Flag]="1"" />. К общему запросу данное выражение добавляется через оператор AND.
- <property name="formsByBundleID">- карта соответствий «id бандла-> имя notes-формы, соответствующей бандлу». Например, <entry key="rkk" value="Input" />.
Хардкод
К сожалению, не для всех параметров поисковой формы можно задать соответствия из п.3.2.6 в xml-файле поиска. К таким параметрам относится, например, параметр Тематика Ркк ОГ (fullQuestion), значение которого представляет собой элемент многоуровневого тематического классификатора. В таких случаях необходимо реализовать специальную обработку параметра. Например, см. класс ru.intertrust.cmj.af.search.dp.request.DominoRequestBuilderImpl, функция String getFormulaSearchFullQuestion(Map<?, ?> mapObject).
Также допускается хардкод для задачи формирования атрибутов результирующей коллекции. Например, см. классы наследники класса ModuleExtractorImpl.
Актуализация xml-файл поиска из настройки
Для кастомизации настроек поиска была разработана альтернативная загрузка настроек поиска из внешнего файла. Файл хранится в клиенте Системного администратора\Структура системы\Настройка web-поиска.
Переиндексация модуля
language | sql |
---|
Тип параметра
Список типов параметра
Видимость параметра
Свойство, позволяющее настраивать видимость поля в зависимости от значения другого поля
Классификаторы
Настройка «Классификатор параметра» позволяет задать для параметра на форме расширенного поиска возможность выбора значений из справочника. Классификатор определяется в xml-файле поиска. Связь параметра с классификатором задается в в настройке бина параметра.
Параметр поиска
Конфигурация параметров запроса
Бандл
Для каждой области поиска свой набор искомых объектов иначе бандлов (определение бандла см. ниже), для каждого бандла определен свой набор параметров. Один бандл может входить в несколько областей поиска. Один параметр может входить в несколько бандлов. При выборе более одной областей поиска система формирует пересечение бандлов этих областей для отображения в разделе «Искомый объект», т.е. используются общие бандлы. Набор параметров также формируется как пересечение параметров бандлов различных областей поиска. Например, в областях поиска соответствующих БД "ОРД" и "Поручения", может быть общий набор параметров, характерных бандлу "резолюция", входящего в обе эти области поиска. Пользователь имеет возможность выбрать такой набор, и в результаты должны попасть только объекты соответствующего класса из всех выбранных областей, исключив при этом объекты других классов.
ID-бандла
Список id-бандла
Иерархия билдеров областей поиска
Организует билдеры неиерархических областей поиска в иерархию для создания иерархии областей поиска.
Поисковик
Поисковик выполняет поиск по приложению средствами Solr
Параметры сортировки
Настройка параметров сортировки
Форма поиска
Подключение форм поиск к иерархии билдеров областей поиска
Настройка поиска формы
Настройка однострочного поиска в шапке
Отображение результатов
Настройка отображения результатов поиска