Дерево страниц
Skip to end of metadata
Go to start of metadata

Вы просматриваете старую версию данной страницы. Смотрите текущую версию.

Сравнить с текущим просмотр истории страницы

« Предыдущий Версия 45 Следующий »

Корневой элемент beans. Пространство имен: <beans lxmlns="http://www.springframework.org/schema/beans">

Краткое описание

В настройках поиска указывается конфигурация, в которой задаются атрибуты поиска, алгоритм обработки результатов их вывод

Структура XML
<?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>
Статус

В РАБОТЕ

КомментарийРазбить на подстраницы

Варианты поиска

Простой поиск
<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> 


Пример
Для формирования скоупа в класс билдера передаются парамтеры:

  1. Уникальный префикс для идентификатора области. Должен быть уникальным в рамках иерархии областей одной;
    <constructor-arg name="idPrefix" value="contracts" />
  2. Идентификатор БД;
    <constructor-arg name="systemId" value="ContractsLite"
  3. Параметры дефолтного бандла. Обычно указывается один параметр – subject.
    <ref local="subject" />
  4. Набор бандлов
    <constructor-arg name="bundles"> …
  5. Набор поисковиков
    <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>


В конструктор бина передаются параметры:

  1. <property name="nsFieldsByParamByBundleID"> - карта соответствий «параметр-> notes-поле». Ключ элемента карты имеет формат: id бандла# id параметра. Например, key="rkk#regDate". Значение элемента карты в простом случае представляет собой имя соотв. Notes-поля, которое участвует в формировании строки поиска в Domino. Например, value="rdate". Далее рассмотрим следующие случаи:
    1. Параметр с типом vcard (сотрудник) и в Domino идет поиск не только по открытому имени сотрудника, но и по названию организации сотрудника. В этом случае в поисковом запросе нужно указать два поля – поле, в котором хранится имя сотрудника, и поле с названием организации. Оба поля передаются в формате: поле сотрудника # поле организации. Например, value="UserFrom#From". Запрос по параметру будет выглядеть следующим образом:
      ([UserFrom]="Петров В. А." AND [From]="Руднев-Шиляев")).
    2. Случай, когда для одного параметра необходимо выполнить поиск по двум полям. В данном случае в поисковом запросе используется оператор ИЛИ. Оба поля передаются в формате: поле1% поле2. Например,
      value="Executor%execpeoples#ORGANISATIONNAME".
      Запрос по параметру будет выглядеть следующим образом:
      (([Executor]=" Петров В. А." OR ([execpeoples]=" Петров В. А." AND [ORGANISATIONNAME]="Руднев-Шиляев"))).
  2. property name="nsFieldsByParamByBundleID"> - карта соответствий «параметр-> формула». Ключ элемента карты имеет такой же формат, который описан в п. 1). Значение элемента карты представляет собой выражение для FT-запроса. Например, <entry key="rkk#isControl" value="[ExtContr_Flag]="1"" />. К общему запросу данное выражение добавляется через оператор AND.
  3. <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-поиска.


Переиндексация модуля

select fdr.id from F_DP_IntRkk
natural join f_dp_rkkbase fdr 
join ss_module ss_module on fdr.module = ss_module.id  and ss_module.id_type = fdr.module_type
join ss_moduletype ss_moduletype on ss_module.type = ss_moduletype.id and ss_moduletype.alias ='{Module}'


  • Нет меток