背景:我喜欢在Marklogic生产数据库中加载500k文档。我们有一个使用CPF的处理管道,用于文档摄取。我存储了文档的MIME类型。
我需要基于FileType的facet。我不能使用MIME-Type进行分面,因为常规用户不理解MIME类型,他们更熟悉扩展(Excel,Word,Jpeg等...)..我的问题是多个MIME类型可以映射到一次单个文件类型,例如: - Excel有10个或更多MIME类型,我想将它们全部映射到Excel。
以下是我提出的关于如何实施的两种可能性。我想知道是否还有其他好办法来实现这一目标。
我喜欢第二个选项,但有没有比更改我的CPF代码或禁用触发器数据库一段时间更好的方法?
还有哪一个(1或2)更好的方法呢?而且我想知道是否有比这些更好的选择..
答案 0 :(得分:3)
您准确列出了两个选项。在查询时执行,或在索引时执行。并且您准确地列出了利弊。我的建议:如果它在查询时足够快,并且如果可以接受更高级代码的维护,那么就这样做。否则将知识融入文件中。
答案 1 :(得分:1)
只有500k文件,我认为查询时间足够快。您可以为此目的利用此分组约束:https://github.com/grtjn/ml-constraints#grouping-constraint
您可以使用MLPM安装和部署它。之后,您可以在搜索选项中使用类似的内容:
<constraint name="Attachment-Type">
<custom>
<parse apply="parse-structured" ns="http://marklogic.com/grouping-constraint" at="/ext/mlpm_modules/ml-constraints/grouping-constraint.xqy"/>
<start-facet apply="start" ns="http://marklogic.com/grouping-constraint" at="/ext/mlpm_modules/ml-constraints/grouping-constraint.xqy"/>
<finish-facet apply="finish" ns="http://marklogic.com/grouping-constraint" at="/ext/mlpm_modules/ml-constraints/grouping-constraint.xqy"/>
<facet-option>limit=5</facet-option>
<facet-option>frequency-order</facet-option>
<facet-option>descending</facet-option>
<facet-option>any</facet-option>
</custom>
<annotation>
<range type="xs:string" facet="true" collation="http://marklogic.com/collation//S1">
<element ns="http://my-namespace.com" name="mime-type"/>
</range>
<config>
<group label="Audio">
<match pattern="audio/*"/>
</group>
<group label="Video">
<match pattern="video/*"/>
<match pattern="application/vnd.rn-realmedia"/>
</group>
<group label="Documents">
<match pattern="application/msword"/>
<match pattern="application/vnd.wordperfect"/>
<match pattern="application/x-wordstar"/>
<match pattern="application/pdf"/>
<match pattern="application/postscript"/>
<match pattern="application/rtf"/>
<match pattern="application/x-xywrite"/>
<match pattern="application/x-mass11"/>
</group>
<group label="Spreadsheets">
<match pattern="application/vnd.ms-excel"/>
</group>
<group label="Presentations">
<match pattern="application/vnd.ms-powerpoint"/>
</group>
<show-remainder label="Other"/>
</config>
</annotation>
</constraint>
但是,性能会因您提供的组和模式数量以及总文档数量而下降。一旦文档总数超过数百万,这可能需要相对较长的搜索时间。在这种情况下,你最好先预先计算小组..
HTH!
答案 2 :(得分:0)
如果您担心性能并且更愿意预先计算,请考虑利用CPF,而不是与之抗争。确保您的CPF管道可以检测到不需要做任何工作的情况(防止事情被添加两次等),并让它只填写缺少的部分。一旦确定以这种方式配置CPF,并且添加了添加文件类型的逻辑,只需通过重新插入文件来触摸文件xdmp:document-insert($uri, doc($uri), xdmp:document-get-permissions($uri), ....)
..
HTH!