2016-09-24 46 views
3

我正在使用最新版本的alfresco 5.1版本。 我的要求之一是创建属性(键/值),其中用户输入密钥以及值。alfresco buildonly indexer用于搜索即时创建的属性

,所以我已经做了这样的

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索引器?

+0

我不明白你为什么使用“buildonly”(这是真的不赞成使用Lucene的)摆在首位? – Lista

+0

我知道它已弃用,只有如果我提到“构建”作为索引器,我可以搜索我已创建的属性(如问题中指定的) –

+0

意思是,如果使用SOLR去找不到文档?你是否遇到错误,或者找不到文件? – Lista

回答

0

首先,仔细检查您是否只是遇到最终一致性,如下所述。如果您是,并且如果这对您造成问题,请考虑切换到CMIS查询,同时停留在SOLR上。

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

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

How to find List of unindexed file in alfresco

+0

嗨列斯塔,感谢您的努力。我在露天IRC频道中提出了同样的问题,似乎我无法搜索在飞行中创建的属性。该属性必须附加到模型! –

+0

我明白了,我还没有意识到那些道具不在你的模型中,完全没有与那个案例合作是完全诚实的。 从模型中忽略它们的原因是什么? – Lista

+1

以及需求是具有与特定节点相关联的属性,其中用户可以输入密钥以及他所选择的值,并且这些属性不应该可见(可用)到其他节点。用户应该能够根据创建的属性搜索节点! –

1

在查询 String query = "@cm\\:customProp1:\"prop1\""; 删除厘米,当你建造上飞的QName,因此不会下厘米,即(ContentModel)特性来。所以,你的查询将被

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

希望这会为你工作

+0

谢谢萨钦,我试过你的解决方案,它与** buildonly **索引器一起工作。 由于我使用索引器** solr4 **您的查询结果为空集。 –