1 Reply Latest reply on Aug 23, 2017 10:31 AM by r b

    Index per workspace not working correctly

    ra bo Newbie

      Hi,

       

      I'm using ModeShape 5.4.1 with the local index provider and I'm using this query:

       

      QueryManager queryManager = session.getWorkspace().getQueryManager();

      Query query = queryManager.createQuery("SELECT * FROM [" + type.toString() + "] WHERE [jcr:name] = $name", Query.JCR_SQL2);

      query.bindValue("name", session.getValueFactory().createValue(nodeName));

       

      When running this without indexing enabled, I get exactly only the matching node(s) of the current workspace (expected behavior).

      However, when I enable the index then all matching nodes from all workspaces in the repository are returned.

       

      I set indexes dynamically from code like such:

       

      IndexDefinitionTemplate nodeByTypeIndexDefinitionTemplate = indexManager.createIndexDefinitionTemplate();

      nodeByTypeIndexDefinitionTemplate.setName("nodeByType_" + session.getWorkspace().getName());

      nodeByTypeIndexDefinitionTemplate.setWorkspace(session.getWorkspace().getName());

      nodeByTypeIndexDefinitionTemplate.setKind(IndexKind.NODE_TYPE);

      nodeByTypeIndexDefinitionTemplate.setProviderName("local");

      nodeByTypeIndexDefinitionTemplate.setNodeTypeName("nt:base");

      nodeByTypeIndexDefinitionTemplate.setColumnDefinitions(indexManager.createIndexColumnDefinitionTemplate().setPropertyName("jcr:primaryType").setColumnType(PropertyType.STRING));

      nodeByTypeIndexDefinitionTemplate.setSynchronous(true);

       

      indexManager.registerIndex(nodeByTypeIndexDefinitionTemplate, false);

       

      And when I enabled debug logging I could see the following:

       

      2017-08-08 09:32:51,009 DEBUG [localhost-startStop-1] org.modeshape.jcr.index.local.LocalIndexProvider - Index provider 'local' is creating index in workspace 'admin': nodeByType_admin@local nodeType=nt:base column=jcr:primaryType(STRING) kind=NODE_TYPE sync=true workspaces=*

       

      Obviously, even though I set the index to only match one workspace, the rule is set to * so that it matches all workspaces.

       

      So:

      1. Even though an index is used for several workspaces a query should only return results from the current workspace

      2. Setting the indexes via code should respect the workspace matching rule

       

      Is this expected or are these bugs? If these are bugs is there any workaround?