如何将给定文本搜索到 marklogic XHTML 文件中,如 clt+f

How to search the given text into marklogic XHTML file, like clt+f

我将以下 XHTML 文件保存在带有 URI(/54ab8c234f3c8ce1f5c30ddc) 的 marklogic 中。

我需要根据字符串搜索Marklogic DB(如果是标签名称或属性名称或XHTML中的文本)。

我只能搜索文本任一属性。但是一次都搜不到

注意:如果我传递 "SS_Default"(它是一个属性值)字符串,它将 return marklogic 的 URI 或者如果我传递 "META"(它是一个标签名称) 它应该 return 相应的 URI 或者如果我传递 "Narrowed by"(它是一个文本)它应该 return 相应文件的 URI。

            <?xml version="1.0" encoding="UTF-8"?>
    <html xmlns="http://www.w3.org/1999/xhtml">
        <meta>
            </meta>
        <body class="Default">

        </body>
    </html>

您尝试执行的搜索类型通常彼此不同,因为它们是不同类型的数据。例如,如果您要搜索 "meta" 并查找包含该元素的文档,则您正在查询结构。您可以在 MarkLogic 中使用这种查询来做到这一点:

cts:uris((), (), cts:element-query(xs:QName("meta"), ()))

当你想搜索 "narrowed by" 时,那只是文本,简单明了:

cts:uris((), (), "narrowed by")

如果您想在属性中搜索,通常通过指定您要搜索的属性来完成:

cts:uris((), (), cts:attribute-value-query(xs:QName("body"), xs:QName("class"), "SS_Default"))

如果您想合并这些,您可以 运行 or-query。我建议查看您计划 运行 的查询类型,看看它们是否可以通过这种方式进行细分。正如 mholstege 指出的那样,您可以将文档作为文本加载并能够将所有内容作为字符串进行搜索,但是您会在结构中失去很多价值,因此最好退后一步并考虑您是否真的需要 运行那些查询方式相同。

在摄取时,您可以通过在原始文档周围创建包装来使用信封模式。

<envelope>
  <original>
    <html>...</html>
  </original>
  <plain-text>
    put the plain text content of your html here
  </plain-text>
</envelope>

您的文本搜索只能在纯文本元素上执行,并且在 return 生成的文档上您可以 return 内容元素。 但是正如 Dave 提到的,您正在丢失有价值的信息。 您可以在此处找到有关摄取数据方法的文档 https://docs.marklogic.com/guide/ingestion