Индексирование файлов XML (DITA) с помощью Lucene и запрос значений атрибутов
Мы пытаемся реализовать комплексную индексацию для файлов XML (DITA) в AEM, используя Lucene. Прямо сейчас поиски поддерживаются полнотекстовым индексом.
Например: в приведенном ниже документе весь текст извлекается и индексируется для облегчения полнотекстовых запросов к содержимому документа.
<concept id="lawnmowerconcept" xml:lang="en-us">
<title>Lawnmower</title>
<conbody product="mower25h">
<p>The lawnmower is a machine used to cut grass in the yard. Lawnmowers can be electric, gas-powered, or manual.</p>
</conbody>
</concept>
Теперь просьба также разрешить специализированный поиск XML. Например:
- Пользователь может искать по имени элемента. например, el:conbody - это должно возвращать только те документы, которые имеют
<conbody>
элемент. - Пользователь может искать по имени атрибута. Например, @product=”%” - здесь должны возвращаться только те документы, у которых атрибут product применен хотя бы к одному из его элементов. Обратите внимание, что мы не обеспокоены значением этого атрибута.
- Пользователь может выполнять поиск по паре имя-значение атрибута. Например, @product=”mower25h” - при этом должны возвращаться только те документы, у которых атрибут product применен хотя бы к одному из его элементов со значением mower25h.
Каков наилучший способ реализации:
Продолжайте использовать полнотекстовый индекс, но используйте специальный анализатор Lucene для сохранения разметки XML. Например
<title>Lawnmower</title>
будет разбит на<title>, Lawnmower, </title>
без зачистки специальных символов.Создайте новый полнотекстовый индекс с помощью специального анализатора, который удаляет все текстовое содержимое и индексирует только элемент, имена атрибутов и значения атрибутов. Возможно ли пересечение двух индексов? Например, запрос типа el:p=%lawnmower% вернет вышеуказанный документ, потому что он имеет
<p>
элемент с текстом газонокосилки.Или мне следует полностью избегать AEM Lucene и предпочтительно использовать внешний индекс, такой как Solr?