【问题标题】:alfresco buildonly indexer for searching the properties created on the flyalfresco buildonly 索引器,用于搜索动态创建的属性
【发布时间】:2016-09-24 07:35:05
【问题描述】:

我使用的是最新的 alfresco 5.1 版本。 我的要求之一是创建用户输入键和值的属性(键/值)。

所以我就这样做了

    Map<QName, Serializable> props = new HashMap<QName, Serializable>();
    props.put(QName.createQName("customProp1"), "prop1");
    props.put(QName.createQName("customProp2"), "prop2");
    ChildAssociationRef associationRef = nodeService.createNode(nodeService.getRootNode(storeRef), ContentModel.ASSOC_CHILDREN, QName.createQName(GUID.generate()), ContentModel.TYPE_CMOBJECT, props);

现在我要做的是使用这些新创建的属性搜索节点。我能够像这样搜索新创建的属性。

public List<NodeRef> findNodes() throws Exception {
    authenticate("admin", "admin");
    StoreRef storeRef = new StoreRef(StoreRef.PROTOCOL_WORKSPACE, "SpacesStore");
    List<NodeRef> nodeList = null;
    Map<QName, Serializable> props = new HashMap<QName, Serializable>();
    props.put(QName.createQName("customProp1"), "prop1");
    props.put(QName.createQName("customProp2"), "prop2");
    ChildAssociationRef associationRef = nodeService.createNode(nodeService.getRootNode(storeRef), ContentModel.ASSOC_CHILDREN, QName.createQName(GUID.generate()), ContentModel.TYPE_CMOBJECT, props);
    NodeRef nodeRef = associationRef.getChildRef();
    String query = "@cm\\:customProp1:\"prop1\"";
    SearchParameters sp = new SearchParameters();
    sp.addStore(storeRef);
    sp.setLanguage(SearchService.LANGUAGE_LUCENE);
    sp.setQuery(query);
    try {
        ResultSet results = serviceRegistry.getSearchService().query(sp);
        nodeList = new ArrayList<NodeRef>();
        for (ResultSetRow row : results) {
            nodeList.add(row.getNodeRef());
            System.out.println(row.getNodeRef());
        }
        System.out.println(nodeList.size());
    } catch (Exception e) {
        e.printStackTrace();
    }
    return nodeList;
}

alfresco-global.properties 索引器配置为

index.subsystem.name=buildonly
index.recovery.mode=AUTO
dir.keystore=${dir.root}/keystore

现在我的问题是

是否可以使用 solr4 索引器实现相同的目标? 或者有什么方法可以为特定查询使用 buildonly 索引器?

【问题讨论】:

  • 我不明白你为什么首先使用“buildonly”(这实际上是一个已弃用的 Lucene)?
  • 我知道它已被弃用,只有当我提到“buildonly”作为索引器时,我才能搜索我创建的属性(如问题中所述)
  • 意思,如果你用SOLR你找不到文件?您收到错误消息,还是根本找不到文档?
  • 我没有收到任何错误,结果集为空

标签: java solr alfresco


【解决方案1】:

在您的查询中 String query = "@cm\\:customProp1:\"prop1\""; 在动态构建 QName 时删除 cm,使其不属于 cm 即(ContentModel)属性。所以你的查询将是

String query = "@\\:customProp1:\"prop1\"";

希望这对你有用

【讨论】:

  • 感谢 Sachin,我尝试了您的解决方案,它适用于 buildonly 索引器。由于我使用索引器 solr4 您的查询结果为空集。
【解决方案2】:

首先,请仔细检查您是否只是遇到最终一致性,如下所述。如果您是,并且如果这给您带来了问题,请考虑在继续使用 SOLR 时切换到 CMIS 查询。

http://docs.alfresco.com/5.1/concepts/solr-event-consistency.html

除此之外,检查节点是否已被索引。如果有,请仔细查看您是如何构建查询的。

How to find List of unindexed file in alfresco

【讨论】:

  • 您好,Lista,感谢您的努力。我在露天 IRC 频道中问过同样的问题,似乎我无法搜索动态创建的属性。该属性必须附加到模型!
  • 我明白了,我没有意识到这些道具不在你的模型中,老实说,根本没有处理过这种情况。从模型中省略它们的原因是什么?
  • 那么要求是具有与特定节点关联的属性,用户可以在其中输入他选择的键和值,并且这些属性不应该对其他节点可见(可用)。用户应该能够根据创建的属性搜索节点!!
猜你喜欢
  • 2019-12-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-09-28
相关资源
最近更新 更多