首页 > 解决方案 > 如何在 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

您能帮我编写单词查询以确保它按预期工作吗?还是我们需要采用不同的方法?

标签: xmlsearchxquerymarklogic

解决方案


这里有两种基本方法:

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

推荐阅读