Постановка задачи

Добавить поиск для нового модуля.

Инструмент: Палитра XML, Плагин, Настройка системы

Статус

РазделПоиск
КомментарийИнформация по настройкам параметра поиска находится здесь Описание конфигурации поиска





Реализация

Последовательность действий по реализации поиска:

  1. Редактирование конфигурации поиска applicationContext-config-search{Project}.xml
  2. Создание области поиска {Module}_area.xml
  3. Подключение области поиска к кастомным коллекциям {Module}_({Collection})Metadata.xml
  4. Загрузить конфигурацию поиска и перезагрузить сервер
  5. Загрузить область поиска
  6. Запуск плагина реиндексации ru.intertrust.cm_sochi.plugins.SolrReindexingPlugin
  7. Создание области поиска в системе
  8. Подключение области поиска в портальный профиль


Редактирование конфигурации поиска

Определение параметров поиска

    <!--Дата-->
	<bean id="exampleDate" class="ru.intertrust.cmj.af.search.dp.CmParameter"
          c:id="testDate" c:name="Дата:"
          c:messageSource-ref="cmj_af_search_messageSource" c:type-ref="tdateinterval"/>
 	<!--Сотрудник-->
	<bean id="exampleVCard" class="ru.intertrust.cmj.af.search.dp.CmParameter"
          c:id="testVCard" c:name="Сотрудник:"
          c:messageSource-ref="cmj_af_search_messageSource" c:type-ref="tvcard">
        <constructor-arg name="classifier">
            <list value-type="ru.intertrust.cmj.af.search.Classifier">
                <ref bean="fvCurrHumanHH"/>
                <ref bean="clCurSysEmps"/>
                <ref bean="clNosys"/>
            </list>
        </constructor-arg>
    </bean>

Подключение параметров поиска к форме

<bean id="rkkSuperBundle{Module}" abstract="true" class="ru.intertrust.cmj.af.search.dp.CmBundle">
        <constructor-arg index="0" value="rkk"/>
        <constructor-arg index="1"
                         value="{Object}"/>
        <constructor-arg index="2">
            <list>
                <ref bean="exampleDate"/>
                <ref bean="exampleVCard"/>
            </list>
        </constructor-arg>
        <constructor-arg index="3" ref="cmj_af_search_messageSource"/>
    </bean>

Определение модуля 

<bean id="{module}Searcher" 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}_area"/>
        <constructor-arg name="targetCollectionName" value="(search)"/>
        <constructor-arg>
            <bean class="ru.intertrust.cm_sochi.srv.connector.sochi.search.{Basic Module}SearchFilterCreator"/>
        </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>

Определение объекта

<!-- Формирует список областей поиска путём вызова дочерних билдеров.  Если дочерний билдер является тоже ScopeTreeBuilder, 
то созданный им список областей делается дочерним к последней созданной области. Если список сделать дочерним невозможно, 
то список просто добавляется к общему списку областей первого уровня. -->    
	<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="rkkSuperBundle{Module}"/>
                        </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>
			</list>
		</property>
	</bean>

Создание области поиска

<search-area name="{Module}_area">
	<target-domain-object type="F_DP_OutputRkk"> 

 		<linked-domain-object type="Tn_Field_Datetime" nested="true">
            <indexed-field name="tDate" solr-prefix="cm_dt">
                <script>if (ctx.get('cmjfield').equals('DateControl')){ ctx.get('value'); }</script>
            </indexed-field>
		</linked-domain-object>
    
        <linked-domain-object type="F_DP_Rkk_SigningInfo">
            <indexed-field name="tVCard" search-by="substring" language="">
                <doel>signer.orig_shortname</doel>
            </indexed-field>
            <parent-link>
                <doel>Owner</doel>
            </parent-link>
        </linked-domain-object>
	</target-domain-object>
</search-area>

Настройка соответствия параметров поиска и области поиска 

<bean id="dominoRequestConfig{Module}" class="ru.intertrust.cmj.af.search.dp.request.DominoRequestConfig">
        <!-- Отображение ID параметров запроса на поля notes документа -->
        <property name="nsFieldsByParamByBundleID">
            <map merge="true">
                <entry key="rkk#testDate" value="tDate"/>
                <entry key="rkk#testVCard" value="tVCard"/>
            </map>
        </property>
        <!-- Отображение ID бандла на имя формы notes документа -->
        <property name="formsByBundleID">
            <map merge="true">
                <entry key="rkk" value="{Basic Object}"/>
            </map>
        </property>
</bean>

Подключение поиска к кастомной коллекции

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:p="http://www.springframework.org/schema/p"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans
       http://www.springframework.org/schema/beans/spring-beans-3.2.xsd" default-lazy-init="true">
    <bean id="{Module}_({Collection})Metadata"
          class="ru.intertrust.cm_sochi.srv.connector.sochi.collections.CollectionMetadataNew" p:caseSensitiveFieldNames="true" p:searchArea="{Module}_area">
        <constructor-arg>
            <list value-type="ru.intertrust.cm_sochi.srv.connector.sochi.collections.Field">
                <bean class="ru.intertrust.cm_sochi.srv.connector.sochi.collections.Field" p:name="self">
                    <property name="virtualField">
                        <bean class="ru.intertrust.cm_sochi.srv.connector.sochi.collections.BuildVirtualField">
                            <property name="realFields">
                                <list>
                                    <value>self_1</value>
                                    <value>Module</value>
                                    <value>self_2</value>
                                    <value>ID</value>
                                    <value>created_date</value>
                                    <value>self_3</value>
                                </list>
                            </property>
                            <property name="pattern" value="<id>([0-9]{16}):([0-9A-F]{32})</>" />
                            <property name="separator" value=""/>
                            <property name="emptySeparator" value="true"/>
                        </bean>
                    </property>
                </bean>
            </list>
        </constructor-arg>
    </bean>
</beans>

Запуск реиндексации

  1. Открыть НБР-аминку
  2. Перейти в раздел Структура Системы\Инструменты\Плагины
  3. Ввести название плагина ru.intertrust.cm_sochi.plugins.SolrReindexingPlugin
  4. Нажать "Применить"
  5. Выделить найденный плагин
  6. Нажать кнопку Play
  7. Ввести SQL-запрос. SQL-запрос нужно делать по таблицам, которые определены в области поиска тегах target-domain-object и linked-domain-object.

Создать область поиска

  1. Открыть НБР-аминку
  2. Перейти в раздел  Структура системы\Каталог\Области поиска
  3. Нажать на кнопку "Создать"
  4. Заполнить название области поиска
  5. В качестве приложения указать Портал
  6. В поле "Область" указать приложение, по которому будет производиться поиск
  7. Сохранить

Подключить область поиска к портальному профилю

  1. Открыть НБР-аминку
  2. Перейти в раздел  Организация\Профили\Профили иерархии
  3. Выбрать портальный профиль
  4. Нажать на кнопку "Редактировать"
  5. Перейти в раздел "Добавленные области поиска"
  6. Выбрать область поиска
  7. Сохранить


  • {Project} - название проекта
  • {Module} - название модуля
  • {Collection} - название коллекции
  • {Basic Module} - базовый модуль
  • {Object} - название объекта
  • {Basic Object} - базовый объект