protected FulltextIndexEditorContext(NodeState root, NodeBuilder definition, @Nullable IndexDefinition indexDefinition, IndexUpdateCallback updateCallback, FulltextIndexWriterFactory indexWriterFactory, ExtractedTextCache extractedTextCache, IndexingContext indexingContext, boolean asyncIndexing) { this.root = root; this.indexingContext = checkNotNull(indexingContext); this.definitionBuilder = definition; this.indexWriterFactory = indexWriterFactory; this.definition = indexDefinition != null ? indexDefinition : createIndexDefinition(root, definition, indexingContext, asyncIndexing); this.indexedNodes = 0; this.updateCallback = updateCallback; this.extractedTextCache = extractedTextCache; this.asyncIndexing = asyncIndexing; if (this.definition.isOfOldFormat()){ indexDefnRewritten = true; IndexDefinition.updateDefinition(definition, indexingContext.getIndexPath()); } else { indexDefnRewritten = false; } }
@Test public void autoFormatUpdate() throws Exception{ NodeBuilder index = builder.child(INDEX_DEFINITIONS_NAME); NodeBuilder nb = newLuceneIndexDefinitionV2(index, "lucene", of(TYPENAME_STRING)); //1. Trigger a index so that next index step does not see it as a fresh index NodeState indexed = HOOK.processCommit(EMPTY_NODE, builder.getNodeState(), CommitInfo.EMPTY); IndexDefinition defn = new IndexDefinition(root, indexed.getChildNode(INDEX_DEFINITIONS_NAME).getChildNode("lucene"), "/foo"); assertFalse(defn.isOfOldFormat()); }
@Test public void formatUpdate() throws Exception{ NodeBuilder defnb = newFTIndexDefinition(builder.child(INDEX_DEFINITIONS_NAME), "foo", "lucene", of(TYPENAME_STRING), of("foo", "Bar"), "async"); IndexDefinition defn = new IndexDefinition(root, defnb.getNodeState(), "/foo"); assertTrue(defn.isOfOldFormat()); NodeBuilder updated = IndexDefinition.updateDefinition(defnb.getNodeState().builder()); IndexDefinition defn2 = new IndexDefinition(root, updated.getNodeState(), "/foo"); assertFalse(defn2.isOfOldFormat()); IndexingRule rule = defn2.getApplicableIndexingRule(asState(newNode("nt:base"))); assertNotNull(rule); assertFalse(rule.getConfig("foo").index); assertFalse(rule.getConfig("Bar").index); }
@Test public void propertyRegExAndRelativeProperty() throws Exception{ NodeBuilder defnb = newFTIndexDefinition(builder.child(INDEX_DEFINITIONS_NAME), "foo", "lucene", of(TYPENAME_STRING), of("foo"), "async"); IndexDefinition defn = new IndexDefinition(root, defnb.getNodeState(), "/foo"); assertTrue(defn.isOfOldFormat()); NodeBuilder updated = IndexDefinition.updateDefinition(defnb.getNodeState().builder()); IndexDefinition defn2 = new IndexDefinition(root, updated.getNodeState(), "/foo"); IndexingRule rule = defn2.getApplicableIndexingRule(asState(newNode("nt:base"))); assertNotNull(rule.getConfig("foo")); assertNull("Property regex used should not allow relative properties", rule.getConfig("foo/bar")); }