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

时间:2019-06-19 11:11:36

标签: xml search xquery marklogic

我们在xml中有如下数据

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

单词查询如下

<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>

当我们搜索名字或姓氏时,它可以正常工作并得到结果

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

现在,当用户要搜索全名(即“ Joisar Manish”)时,由于两者均位于单独的元素中,因此它不会显示结果。它至少应该搜索一种方式,即Joisar Manish或Manish Joisar

请问我如何写单词查询以确保它能按预期工作吗?还是我们需要采用其他方法?

1 个答案:

答案 0 :(得分:3)

这里有两种基本方法:

  1. 是分别搜索名称的每个部分,并在逻辑上AND一起Joisar AND Manish
  2. 您的思考方式,作为词组搜索。但是,在这里,您需要重新配置数据库,因为默认情况下,短语在元素边界处中断。因此,您想将这些低级元素声明为phrase-through元素。然后,您对person元素进行搜索。假设这些块实际上是相邻的。