Мы пытаемся реализовать комплексную индексацию для файлов 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?