如何在 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
你能帮我写下单词查询以确保它按预期工作吗?或者我们需要采用不同的方法?
这里有两种基本方法:
- 就是分别搜索名字的每一部分,然后
AND
一起搜索,逻辑上Joisar AND Manish
。
- 您的想法是,作为短语搜索。但是,在这里,您需要对数据库进行一些重新配置,因为默认情况下短语会在元素边界处中断。所以你想将这些低级元素声明为
phrase-through
元素。然后搜索 person
元素。假设这些片段实际上是相邻的。
我们在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
你能帮我写下单词查询以确保它按预期工作吗?或者我们需要采用不同的方法?
这里有两种基本方法:
- 就是分别搜索名字的每一部分,然后
AND
一起搜索,逻辑上Joisar AND Manish
。 - 您的想法是,作为短语搜索。但是,在这里,您需要对数据库进行一些重新配置,因为默认情况下短语会在元素边界处中断。所以你想将这些低级元素声明为
phrase-through
元素。然后搜索person
元素。假设这些片段实际上是相邻的。