如何在 MarkLogic 中将子元素作为单词查询的一部分

How to include sub element as a part of word query in MarkLogic

我们在xml中有如下数据

<person>
    <snm>Joisar</snm>
    <fnm>Manish</fnm>
    <init>Mr.</init>
</person>

Word查询如下

<options>
    <word>
        <element ns="" name="{$constants:surname}"/>
        <element ns="" name="{$constants:foreName}"/>
        <element ns="" name="{$constants:initial}"/>
        <element ns="" name="{$constants:prefix}"/>
        <element ns="" name="{$constants:suffix}"/>
        <term-option>case-insensitive</term-option>
        <term-option>diacritic-insensitive</term-option>
        <term-option>punctuation-insensitive</term-option>
        <term-option>whitespace-insensitive</term-option>
    </word>
</options>

当我们搜索 First Name OR Last name 时,它​​工作正常并且我们得到结果

search:search($SearchWord, $SearchOption, $Start, $pageLength)

现在,当用户想要搜索全名时,即 "Joisar Manish",它不会显示结果,因为两者都在不同的元素中。至少应该搜索一种方式,即 Joisar Manish 或 Manish Joisar

你能帮我写下单词查询以确保它按预期工作吗?或者我们需要采用不同的方法?

这里有两种基本方法:

  1. 就是分别搜索名字的每一部分,然后AND一起搜索,逻辑上Joisar AND Manish
  2. 您的想法是,作为短语搜索。但是,在这里,您需要对数据库进行一些重新配置,因为默认情况下短语会在元素边界处中断。所以你想将这些低级元素声明为 phrase-through 元素。然后搜索 person 元素。假设这些片段实际上是相邻的。