Java 如何在Alfresco中启用按d:date属性的高级搜索?

Java 如何在Alfresco中启用按d:date属性的高级搜索?,java,solr,alfresco,ecm,Java,Solr,Alfresco,Ecm,我有一个为Alfresco创建的自定义内容模型,它的类型带有d:date属性。我能够构建存储库并共享项目,看起来没有任何错误。但是,我无法使用数据类型d:date或d:int按属性进行搜索。我通过将数据类型更改为d:text并添加regex约束解决了d:int问题,但我不确定这对d:date属性是否明智 我是否需要提供或创建一些额外的配置,以便按非d:text的属性进行搜索 以下是显示类型声明的代码段: <types> <!-- Enterprise-wide gene

我有一个为Alfresco创建的自定义内容模型,它的类型带有d:date属性。我能够构建存储库并共享项目,看起来没有任何错误。但是,我无法使用数据类型d:date或d:int按属性进行搜索。我通过将数据类型更改为d:text并添加regex约束解决了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>

文件
cm:内容
d:文本
d:文本
d:文本
d:日期

共享搜索表单和属性表单似乎呈现正确,因此我认为这些表单中没有任何问题

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

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

另一个是单个参数组:名称、标题、描述、mime类型、修改日期、修饰符。这些属性可以是任何类型。d:date属性在这里是完全可以接受的,修改后的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”分别定义了一个
,其中包含所需的搜索属性/参数

作为实验,您可以直接修改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>


我一直在使用Alfresco Maven SDK通过扩展模块进行定制。我还为我的特定类型创建了一个新的搜索表单,并为我正在使用的d:date属性创建了一个字段。问题是,当我使用该字段进行搜索时,没有返回任何结果。我对另一个使用d:int的属性也有同样的问题,但通过将其更改为d:text属性解决了这个问题。若要了解此问题,请使用处的节点浏览器对自定义模型运行一些测试查询。请验证非文本属性上的约束是否正常工作并返回结果。如果没有,索引可能会有问题。
<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>