Alfresco Share文本字段Facet筛选器无法正常工作问题求助
问题原因
Alfresco 5.2默认使用Solr 4.x作为搜索引擎,文本类型属性默认关联text_general字段类型,其内置的分词器会将-、/、空格、逗号等特殊字符视为分词分隔符,导致Facet统计时把拆分后的片段当成独立值展示。
解决步骤
1. 配置Solr不分词字段类型
找到Solr workspace核心的schema.xml(路径通常为alfresco_data/solr/workspace/conf,archive核心同理),添加一个自定义字段类型,用KeywordTokenizerFactory保留完整属性值:
<fieldType name="text_facet_exact" class="solr.TextField"> <analyzer> <tokenizer class="solr.KeywordTokenizerFactory"/> <!-- 可选:添加LowerCaseFilterFactory实现大小写不敏感匹配,按需启用 --> <filter class="solr.LowerCaseFilterFactory"/> </analyzer> </fieldType>
接着为你的自定义属性创建对应字段,指定使用上述新类型:
<field name="cm:yourCustomProperty" type="text_facet_exact" indexed="true" stored="true" multiValued="false"/>
提示:如果属性是多值类型,将
multiValued设为true
2. 调整Alfresco模型索引配置
打开你的自定义模型文件(或通过Repository管理控制台修改),为目标属性设置tokenised="false",确保Alfresco将属性值作为整体提交给Solr:
<property name="cm:yourCustomProperty"> <type>d:text</type> <index enabled="true"> <atomic>true</atomic> <stored>true</stored> <tokenised>false</tokenised> </index> </property>
3. 重新索引数据
修改配置后需要执行全量索引,让Solr重新处理所有文档的目标属性:
- Share控制台方式:进入Admin Console → Search Service → 点击「Reindex All」
- 命令行方式:
先获取登录ticket:
再执行重索引请求(替换curl -u admin:admin "http://localhost:8080/alfresco/s/api/login"TICKET_XXX为获取到的ticket值):curl -X POST -u admin:admin "http://localhost:8080/alfresco/s/api/admin/reindex?alf_ticket=TICKET_XXX"
4. 更新Facet配置
回到Share的Search Manager,重新创建或修改该属性的Facet配置,确保关联的是我们配置的不分词字段。完成后测试,444-555/789这类带特殊字符的值会作为单个Facet选项展示。
补充说明
- 若不想修改全局schema,可定义动态字段(比如
*_facet)并指定为text_facet_exact类型,再将模型属性映射到该动态字段。 - 先测试新创建的文档,确认Facet显示正常后再处理存量数据,避免影响业务。
内容的提问来源于stack exchange,提问作者Mike1988B
相关产品推荐
相关产品推荐

