Author: bpoussin Date: 2011-02-23 16:40:54 +0100 (Wed, 23 Feb 2011) New Revision: 728 Url: http://nuiton.org/repositories/revision/wikitty/728 Log: change store indexation for attachment if not present in Storage or in Transaction. Create partial document for futur storage of this document Modified: trunk/wikitty-solr-impl/src/main/java/org/nuiton/wikitty/storage/solr/WikittySearchEngineSolr.java Modified: trunk/wikitty-solr-impl/src/main/java/org/nuiton/wikitty/storage/solr/WikittySearchEngineSolr.java =================================================================== --- trunk/wikitty-solr-impl/src/main/java/org/nuiton/wikitty/storage/solr/WikittySearchEngineSolr.java 2011-02-23 15:40:00 UTC (rev 727) +++ trunk/wikitty-solr-impl/src/main/java/org/nuiton/wikitty/storage/solr/WikittySearchEngineSolr.java 2011-02-23 15:40:54 UTC (rev 728) @@ -164,9 +164,6 @@ Map<String, Wikitty> allWikitties = new HashMap<String, Wikitty>(); // les ids des wikitties en parametre reellement modifier (a reindexer) Set<String> dirtyObject = new HashSet<String>(); - // les ids des wikitties qui n'appartiennent pas a un TreeNode passé en - // parametre, mais qui pourrait appartenir a un treenode deja indexe - Set<String> possibleAttachment = new HashSet<String>(); // les ids des TreeNodes dont le champs parent a change (est aussi // contenu dans dirtyObject Set<String> dirtyParent = new HashSet<String>(); @@ -220,13 +217,14 @@ Wikitty w = allWikitties.get(id); SolrDocument oldDoc = dirtyObjectDoc.get(id); SolrInputDocument doc = createIndexDocument(w); - if (oldDoc == null) { - // Le document n'existait pas, mais peut-etre qu'il etait - // dans la liste des attachments d'un TreeNode. Il faudra - // donc rechercher si c'est le cas et l'indexer convenablement - possibleAttachment.add(id); - } else { - // copy des champs #tree.attached + if (oldDoc != null) { + // On a un ancien document partiel ou complet + // s'il etait partiel (seulement l'indexation arbre + // cela veut dire que l'objet TreeNode a ete store + // sans que l'attachment le soit et qu'il l'est que + // maintenant + + // copy des champs #tree.attached des documents partiels ou non SolrUtil.copySolrDocument(oldDoc, doc, TREENODE_ATTACHED + ".*"); if (WikittyTreeNodeHelper.hasExtension(w) && !dirtyParentDoc.containsKey(id)) { @@ -326,15 +324,7 @@ // Phase 3: on reindexe les attachments qui en ont besoin // - // on ajoute les attachment au TreeNode qui ont ete store, sans - // leurs attachments (ni en base, ni dans le meme store) - Map<String, SolrDocument> tree = - SolrUtil.findAllByAttachment(solrServer, possibleAttachment); - for (SolrDocument doc : tree.values()) { - attachmentInTree.add(doc, possibleAttachment); - } - - addTreeIndexField(solrResource, tree, attachmentInTree); + addTreeIndexField(solrResource, null, attachmentInTree); } catch (Exception eee) { throw new WikittyException("Can't store wikitty", eee); } @@ -605,20 +595,23 @@ // reindexation totale). Ceci n'est pas un probleme car // les attachments seront convenablement indexes lorsqu'ils // seront ajoutes - if (oldDoc != null || doc != null) { - if (doc == null) { - doc = new SolrInputDocument(); - SolrUtil.copySolrDocument(oldDoc, doc); - solrResource.addDoc(attId, doc); - } - doc.removeField(TREENODE_ATTACHED + treeNodeId); - for (Object id : treeNodeParents) { - doc.addField(TREENODE_ATTACHED + treeNodeId, id); - } - } else { - // FIXME, il faut tout de meme creer le document - // avec seulement l'id et l'indexation arbre + if (oldDoc == null && doc == null) { + // L'objet en attachment du TreeNode, n'est pas encore + // store et n'est pas dans le meme appel de la methode + // store. On cree donc un document Partiel (seulement + // constitue de l'id et de l'indexation d'arbre qui sera + // reutilise lors du store de reel objet + doc = new SolrInputDocument(); + addToIndexDocument(doc, null, SOLR_ID, attId); + } else if (doc == null) { + doc = new SolrInputDocument(); + SolrUtil.copySolrDocument(oldDoc, doc); + solrResource.addDoc(attId, doc); } + doc.removeField(TREENODE_ATTACHED + treeNodeId); + for (Object id : treeNodeParents) { + doc.addField(TREENODE_ATTACHED + treeNodeId, id); + } } } }