如何在Alfresco中通过d:date属性启用高级搜索?

时间:2014-10-23 17:21:22

标签: java solr alfresco ecm

我有一个我为Alfresco创建的自定义内容模型,其类型带有d:date属性。我能够构建存储库并共享项目似乎没有错误。但是,我无法使用数据类型d:date或d:int搜索属性。我通过将数据类型更改为d:text并添加正则表达式约束来解决d:int问题,但我不确定这对d:date属性是否谨慎。

是否需要提供或创建一些其他配置才能按非d:text属性进行搜索?

这是一个显示类型声明的片段:

<types>
    <!-- Enterprise-wide generic document type -->
    <type name="gl:x">
        <title>Document</title>
        <parent>cm:content</parent>
        <properties>
            <property name="gl:period">
                <type>d:text</type>
            </property>
            <property name="gl:year">
                <type>d:text</type>
                <constraints>
                    <constraint ref="gl:documentYears" />
                </constraints>
            </property>
            <property name="gl:docType">
                <type>d:text</type>
                <constraints>
                    <constraint ref="gl:documentTypeList" />
                </constraints>
            </property>
            <property name="gl:date">
                <type>d:date</type>
            </property>
        </properties>
    </type>
</types>

共享搜索表单和属性表单似乎正确呈现,因此我不认为其中存在任何问题。

1 个答案:

答案 0 :(得分:1)

高级搜索页面接受两种类型的参数。

一个只是“关键字”字段。这将执行全文搜索,即它在任何文本属性中查找提供的关键字。无需为自定义类型配置全文搜索(例如gl:x) - 它会自动获取系统中任何模型中的任何文本属性。

另一个是单个参数组:名称,标题,描述,mime类型,修改日期,修饰符。这些属性可以是任何类型。这里d:date属性是完全可以接受的,因为modified-date参数可以证明。 但是这里不会自动获取自定义属性。它们需要明确配置。

请注意,在高级搜索页面的上半部分是一个名为“查找”的下拉列表,其中包含两个选项:内容和文件夹。最好的方法是为您的内容类型gl:x添加一个选项,并为其配置搜索表单。

您可以在tomcat / webapps / share / WEB-INF / classes / alfresco / share-form-config.xml中找到两种标准搜索表单的定义。文件很长,所以这里有两个要查找的部分:

<config evaluator="model-type" condition="cm:content">
  <forms>
     <!-- Default Create Content form -->
     <form>
     </form>
     <!-- Document Library Create Google Doc form -->
     <form id="doclib-create-googledoc">
     </form>
     <!-- Search form -->
     <form id="search">
     </form>
  </forms>
</config>

<!-- cm:folder type (creating nodes) -->
<config evaluator="model-type" condition="cm:folder">
  <forms>
     <!-- Document Library Common form -->
     <form id="doclib-common">
     </form>
     <!-- Search form -->
     <form id="search">
     </form>
  </forms>
</config>

我已经跳过了细节,但重要的是“cm:content”和“cm:folder”各自定义了一个<form id="search">,其中包含所需的搜索属性/参数。

作为实验,您可以直接修改share-form-config.xml并添加自己的定义:

<config evaluator="model-type" condition="gl:x">
  <forms>
     <!-- Search form -->
     <form id="search">
        <field-visibility>
           <show id="gl:date" />
        </field-visibility>
        <appearance>
           <field id="gl:date">
              <control template="/org/alfresco/components/form/controls/daterange.ftl" />
           </field>
        </appearance>
     </form>
  </forms>
</config>

此外,您必须将新搜索表单添加到tomcat / webapps / share / WEB-INF / classes / alfresco / share-config.xml中的AdvancedSearch配置中:

<config evaluator="string-compare" condition="AdvancedSearch">
  <advanced-search>
     <forms>
        <form labelId="search.form.label.cm_content" descriptionId="search.form.desc.cm_content">cm:content</form>
        <form labelId="search.form.label.cm_folder" descriptionId="search.form.desc.cm_folder">cm:folder</form>
        <form labelId="search.form.label.gl_x" descriptionId="search.form.desc.gl_x">gl:x</form>
     </forms>
  </advanced-search>
</config>

请记住在每次更改后重新启动alfresco。 当您对结果感到满意时,最好将自定义定义移动到项目中的单独share-config-custom.xml(不应直接修改share-config.xml和share-form-config.xml) )。

有关详情:https://wiki.alfresco.com/wiki/Share_Advanced_Search