Jackrabbit XPath Issue - PullRequest
       10

Jackrabbit XPath Issue

0 голосов
/ 06 июля 2011

Я относительно новичок в Jackrabbit.В нашем приложении мы никогда не включали раздел SearchIndex в файлах repository.xml (например, workspace.xml), потому что мы всегда обращаемся непосредственно к данному документу, используя ссылку UCR UCR.Мы используем Jackrabbit v2.2.1 и Oracle в качестве хранилища.Теперь наши требования расширяются, так как мы хотели бы использовать функцию метаданных документа для хранения контекстной информации о документе, чтобы мы могли использовать метаданные для получения выбранного набора документов.

В качестве первого шага я добавил секцию SearchIndex по умолчанию в файл workspace.xml и перезапустил JCR.

В моем файле журнала я увидел несколько таких строк, а затем увидел, что он создал папку индекса в области рабочей области.

2011-07-05 15: 04: 01.724 ИНФОРМАЦИЯ [WebContainer: 0] MultiIndex.java:1204 индексирование ... / vfs: metaData / 21ee130e-978e-415f-bfd1-7aa03d91608c / vfs: attribute (3500)

У меня есть такая структура папок.Когда я создаю документ в JCR, я указываю информацию метаданных как часть документа со сложным типом XSD с тегами, такими как docType, uploadedBy, contextValue и т. Д.

/ (root)
  /MyApp (sub-folder) 
      /documents/ (sub-folder) 
         /document-1.pdf (file) 
         /document-2.pdf (file) 
     /accounts/ (sub-folder) 
         /account.txt (file) 
        etc... 

Следующее выражение XPath работает,

// jcr: root / vfs: metaData // * [vfs: attribute / vfs: docType = 'TAX_DOCS']

Если я даю неправильное значение, дляНапример, вместо «TAX_DOCS», «TAX», он не возвращает никаких документов, как ожидалось, и это здорово.Это доказывает, что метаданные правильно хранятся, как и ожидалось, и правильно используются в процессе фильтрации.

Проблема с этим запросом заключается в том, что он начинает поиск из корневой папки, но я хочу искать только из подпапки / MyApp / documents.Поэтому я попробовал это:

// jcr: root / MyApp / documents // vfs: metaData // * [vfs: attribute / vfs: docType = 'TAX_DOCS']

ничего не возвращает.Тогда я тоже попробовал, но безуспешно.

// jcr: root / MyApp / documents // * [vfs: metaData / vfs: attribute / vfs: docType = 'TAX_DOCS']

Так что же яЯ делаю не так?Что-то в конфигурации workspace.xml нам нужно установить или отсутствует?

Любая помощь приветствуется.

Спасибо, Джек

1 Ответ

2 голосов
/ 07 октября 2011

Удалите двойную косую черту из всего, кроме последнего компонента пути, и используйте нотацию @ для значения атрибута, в результате чего:

/jcr:root/MyApp/documents//*[vfs:attributes/@vfs:docType='TAX_DOCS']

Конструкция // ищет целое поддерево, а не только непосредственноедети любят / делают.Спецификация JCR требует только реализации для поддержки конструкции // как последнего шага запроса XPath.

...