Search 仅对特定元素进行通配符搜索
我正在寻找一种方法,在执行Search 仅对特定元素进行通配符搜索,search,wildcard,marklogic,marklogic-8,Search,Wildcard,Marklogic,Marklogic 8,我正在寻找一种方法,在执行search:search时,只对特定元素执行通配符搜索。具体来说,我可能有如下文档: <pdbe:person-envelope xmlns:pdbe="http://schemas.abbvienet.com/people-db/envelope"> <person xmlns="http://schemas.abbvienet.com/people-db/model"> <costcenter> <
search:search
时,只对特定元素执行通配符搜索。具体来说,我可能有如下文档:
<pdbe:person-envelope xmlns:pdbe="http://schemas.abbvienet.com/people-db/envelope">
<person xmlns="http://schemas.abbvienet.com/people-db/model">
<costcenter>
<code>0000601775</code>
<name>DISC-PLAT INFORM</name>
</costcenter>
<displayName>Tj Tang</displayName>
<upi>10025613</upi>
<firstName>
<preferred>TJ</preferred>
<given>Tze-John</given>
</firstName>
<lastName>
<preferred>Tang</preferred>
<given>Tang</given>
</lastName>
<title>Principal Research Scientist</title>
</person>
<pdbe:raw/>
</pdbe:person-envelope>
当进行搜索时,我希望搜索文本自动进行通配符排序,但只针对某些元素,如displayName、firstName、lastName,而不针对upi或代码。据我所知,我会在数据库中启用某些与通配符相关的索引,但接下来我需要一个自定义查询解析器,将查询重写为多个cts:element query
和cts:element value query
语句,用于我要通配符搜索的每个元素,或与最初解析的搜索查询一起使用。或者我可以创建字段约束,并重写查询以使用字段约束
当用户以简单搜索查询的形式输入时,是否有另一种方法在某些元素上使用通配符进行有条件搜索,而不是在其他元素上使用通配符进行搜索?即,部分名和姓“TJ Tan”,但在搜索“100256”时没有部分命中。您的搜索方向正确。让我们对“TS Tan”进行元素(或者字段)查询 使用,您可以将其分解(了解cs:tokenize-它不仅仅是一个普通的标记器) 然后我有“TS”和“Tan” 您可以执行一些操作,例如应用业务规则,根据哪些单词应该通配符,哪些不应该通配符,并构建适当的cts查询(可能是and语句中的单个单词查询,或者近似查询,调优取决于您的需要)
现在使用搜索短语标记化,你也可以考虑建立你的结果不依赖于通配符索引,而是在元素词词典中——你在哪里进行术语扩展,然后将这些术语发送到查询。 我们有时会更进一步,将查询构建与xdmp:estimate结合起来,如果我们在早期没有得到足够的结果,则会降低查询的限制性
这个逻辑应该放在哪里? 您提到search:search,所以在本例中,我建议您将其打包到自定义约束中