SQL2-запрос для поиска текущего пути (определенного в поле пути или RTE) в пути

Как выполнить следующее с помощью sql2 запроса:

Требование:

дорожка: /content/consumer

  1. перейти на один уровень узла, например: / content / consumer / en-us
  2. поиск строки, созданной в поле пути, например "/ content / consumer / en-us"
  3. если (current Node != Pathfield) затем отобразите это.

повторите шаги с 1 по 3 для всех других локалей (en-ca, fr-fr, de-de и т. д.).

Вот что я попробовал:

    SELECT parent.* FROM [nt:unstructured] AS parent INNER JOIN [nt:unstructured] AS child ON ISDESCENDANTNODE(child,parent) WHERE ISDESCENDANTNODE(parent, [/content/consumer/en-us/]) AND child.[*] = '/content/consumer/%'

The query read or traversed more than 100000 nodes. To avoid affecting other tasks, processing was stopped.

Если я бегу:

SELECT * FROM [nt:unstructured] AS s WHERE ISDESCENDANTNODE('/content/consumer/en-us/ip') and s.* LIKE '/content/consumer/%'

Это отобразит все пути независимо от локальных. То, что я ищу, это: /content/consumer/[^en-us]% (т.е. не как en-us).

Вот что я сделал до сих пор:

Resource resource = request.getResourceResolver().getResource(path);
    Node node = resource.adaptTo(Node.class);

    ResourceResolver resourceResolver = request.getResourceResolver();

    try {
        NodeIterator list = node.getNodes();

        while (list.hasNext()) {
            Node currentSubNode = list.nextNode();
            subNodeName = currentSubNode.getPath();
            culture = extractCultureNodeName(subNodeName);
            fullTextPath = path + culture;

            Map<String, String> map = new HashMap<String, String>();
            map.put("type", "nt:base");
            map.put("path", subNodeName);
            map.put("fulltext", fullTextPath);

            if (StringUtils.isNotBlank(culture)) {
                Query query = queryBuilder.createQuery(PredicateGroup.create(map),
                        resourceResolver.adaptTo(Session.class));
                SearchResult result = query.getResult();

                for (Hit hit : result.getHits()) {
                         String output = hit.getPath();
                        LOG.info("HITs: " + hit.getPath());
                }
            }

        }

Проблема в построителе запросов, число обращений, которые я получаю, намного меньше, чем простой запрос xpath в crxde:

/jcr:root/content/consumer/en-us//element(*, nt:base)
[
(jcr:contains(., ‘/content/consumer/en-us’))
]

0 ответов

Другие вопросы по тегам