Поиск Lucene не работает в OSGI с RDB DocumentService - PullRequest
0 голосов
/ 25 февраля 2020

Я пытаюсь реализовать полнотекстовый поиск по индексу Lucene с помощью службы документов OSGi RDB, но он не работает,

Поиск Lucene работает нормально, если я создал репозиторий, как показано ниже,

Сценарий 1: поиск работает корректно

@Override
protected ContentRepository createRepository() {
    return getOakRepo().createContentRepository();
}

Oak getOakRepo() {
  //  LowCostLuceneIndexProvider provider = new LowCostLuceneIndexProvider();
LuceneIndexProvider provider = new LuceneIndexProvider();
    return new Oak(createInitialContent())
        .with(new OpenSecurityProvider())
        .with((QueryIndexProvider) provider)
        .with((Observer) provider)
        .with(new LuceneIndexEditorProvider());
}



private  DocumentNodeStore createInitialContent()
{
DocumentNodeStore ds=createRDBStore();
    EditorHook hook = new EditorHook(
            new CompositeEditorProvider(new NamespaceEditorProvider(), new TypeEditorProvider()));

    OakInitializer.initialize(ds, new InitialContent(), hook);
    return ds;
}


public DocumentNodeStore createRDBStore()
{
String jdbcurl="jdbc:postgresql://127.0.0.1:5432/SP05";
String user="postgres";
String pw="manager";
DataSource dataSource = RDBDataSourceFactory.forJdbcUrl(jdbcurl, user, pw);
DocumentNodeStore store = new RDBDocumentNodeStoreBuilder().newRDBDocumentNodeStoreBuilder()
   .setRDBConnection(dataSource).build();

возврат магазина; }

Сценарий 2: поиск не работает

@Autowired
private NodeStore documentNodeStoreService;

   @Override
protected ContentRepository createRepository() {
        return getOakRepo().createContentRepository();
    }

    Oak getOakRepo() {
      //  LowCostLuceneIndexProvider provider = new LowCostLuceneIndexProvider();
    LuceneIndexProvider provider = new LuceneIndexProvider();
        return new Oak(intializeNodeStoreService())
            .with(new OpenSecurityProvider())
            .with((QueryIndexProvider) provider)
            .with((Observer) provider)
            .with(new LuceneIndexEditorProvider());
    }


    private static CommitInfo createCommitInfo() {
        Map<String, Object> infoMap = ImmutableMap.<String, Object>of(CommitContext.NAME, new SimpleCommitContext());
        return new CommitInfo(SESSION_ID, null, infoMap);
    }

    private NodeStore intializeNodeStoreService() {
        EditorHook hook = new EditorHook(
                new CompositeEditorProvider(new NamespaceEditorProvider(), new TypeEditorProvider()));
        try {
            NodeBuilder builder = documentNodeStoreService.getRoot().builder();
            new InitialContent().initialize(builder);
            documentNodeStoreService.merge(builder, hook, createCommitInfo());

        } catch (CommitFailedException e) {
            throw new RuntimeException(e);
        }

        return documentNodeStoreService;

    }

В этом случае хранилище создается, но поиск не работает, выдавая ошибку, такую ​​как запрос обхода (запрос без индекса)

Может Вы говорите мне, что я не так делаю здесь?

Код для создания индекса Lucene в обоих сценариях,

      Tree index = root.getTree("/");
      Tree indexDefn = createTestIndexNode(index, LuceneIndexConstants.TYPE_LUCENE);
      TestUtil.useV2(indexDefn);

      indexDefn.setProperty(LuceneIndexConstants.TEST_MODE, true);
      indexDefn.setProperty(FulltextIndexConstants.EVALUATE_PATH_RESTRICTION, true);

      Tree props = TestUtil.newRulePropTree(indexDefn, "nt:base");
      props.getParent().setProperty(FulltextIndexConstants.INDEX_NODE_NAME, true);
      TestUtil.enablePropertyIndex(props, "c1/p", false);
      TestUtil.enableForFullText(props, FulltextIndexConstants.REGEX_ALL_PROPS, true);
      TestUtil.enablePropertyIndex(props, "a/name", false);
      TestUtil.enablePropertyIndex(props, "b/name", false);
      TestUtil.enableFunctionIndex(props, "length([name])");
      TestUtil.enableFunctionIndex(props, "lower([name])");
      TestUtil.enableFunctionIndex(props, "upper([name])");

      root.commit();
  }
...