2016-09-24 48 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 **您的查詢結果爲空集。 –