使用Lucene索引XML(DITA)文件并查询属性值

使用Lucene索引XML(DITA)文件并查询属性值,xml,lucene,aem,dita,Xml,Lucene,Aem,Dita,我们正在尝试使用Lucene在AEM中实现XML(DITA)文件的复杂索引。目前,全文索引支持搜索 例如: 在下面的文档中,提取所有文本并编制索引,以便于对文档内容进行全文查询 <concept id="lawnmowerconcept" xml:lang="en-us"> <title>Lawnmower</title> <conbody product="mower25h"> <p>The lawnmower is a ma

我们正在尝试使用Lucene在AEM中实现XML(DITA)文件的复杂索引。目前,全文索引支持搜索

例如: 在下面的文档中,提取所有文本并编制索引,以便于对文档内容进行全文查询

<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搜索。例如:

  • 用户可以通过元素名称进行搜索。e、 g.el:conbody-这应该只返回包含
    元素的文档
  • 用户可以通过属性名称进行搜索。例如@product=“%”–这应该只返回至少对其一个元素应用了product属性的文档。注意,我们不关心这个属性的值
  • 用户可以通过属性名称-值对进行搜索。例如@product=“mower25h”-这应仅返回将product属性应用于其至少一个元素且值为mower25h的文档
实施以下各项的最佳方式是什么:

  • 继续使用全文索引,但使用自定义Lucene分析器保留XML标记。例如,
    割草机
    将被分解为
    、割草机、
    ,而无需去除特殊字符

  • 使用自定义分析器创建新的全文索引,该分析器剥离所有文本内容,仅对元素、属性名称和属性值进行索引。有可能有两个索引的交集吗? 例如,像el:p=%剪草机%这样的查询将返回上述文档,因为它有一个带有剪草机文本的
    元素

  • 或者我应该完全避免AEM Lucene,最好选择像Solr这样的外部索引


AEM是一种显示HTML文件的web CMS,您是否使用AEM显示原始DITA XML文件?或者您是在使用AEM插件编写XML/DITA文档?它只有全文搜索功能?