Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Search 仅对特定元素进行通配符搜索_Search_Wildcard_Marklogic_Marklogic 8 - Fatal编程技术网

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,所以在本例中,我建议您将其打包到自定义约束中