Marklogic错误的计数和方面结果Xquery [英] Marklogic Wrong count and Facet result Xquery

查看:88
本文介绍了Marklogic错误的计数和方面结果Xquery的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

调用search:search不会返回预期的构面结果计数.以下是两个示例文件和我使用的代码.

Calling search:search doesn't return expected facet result counts. Below are two example files and the code I used.

Page1.xml

Page1.xml

<pages xmlns="http://marklogic.com/docs">
  <page>
    <elementNode>data1</elementNode>
    <textNode>text1</textNode>
  </page>
  <page>
    <elementNode>data2</elementNode>
    <textNode>text2</textNode>
  </page>
  <page>
    <elementNode>data3</elementNode>
    <textNode>text3</textNode>
  </page>
  <page>
    <elementNode>data4</elementNode>
    <textNode>text4</textNode>
  </page>
</pages>

Page2.xml

Page2.xml

<pages xmlns="http://marklogic.com/docs">
  <page>
    <elementNode>data5</elementNode>
    <textNode>text5</textNode>
  </page>
  <page>
    <elementNode>data6</elementNode>
    <textNode>text6</textNode>
  </page>
  <page>
    <elementNode>data7</elementNode>
    <textNode>text7</textNode>
  </page>
  <page>
    <elementNode>data8</elementNode>
    <textNode>text8</textNode>
  </page>
</pages>

我也在<elementNode>上创建了一个元素范围索引.现在,我在XQuery后面执行了searchText" text1 "

Also I have created an element range index on <elementNode>. Now I executed following XQuery with searchText "text1"

xquery version "1.0-ml";
declare namespace html = "http://www.w3.org/1999/xhtml";
declare namespace ts= "http://marklogic.com/docs";

import module namespace search ="http://marklogic.com/appservices/search" at "/MarkLogic/appservices/search/search.xqy";

declare variable $options :=  
  <options xmlns="http://marklogic.com/appservices/search">
    <searchable-expression xmlns:ex="http://marklogic.com/docs">//ex:page</searchable-expression>
    <grammar>
      <starter strength="30" apply="grouping" delimiter=")">(</starter>
      <starter strength="40" apply="prefix" element="cts:not-query">NOT</starter>
      <joiner strength="10" apply="infix" element="cts:or-query" tokenize="word">OR</joiner>
      <joiner strength="20" apply="infix" element="cts:and-query" tokenize="word">AND</joiner>
      <joiner strength="50" apply="constraint">:</joiner>
    </grammar>
    <constraint name="elementNode">
      <range collation="http://marklogic.com/collation/" type="xs:string">
        <facet-option>limit=1000</facet-option>
        <element ns="http://marklogic.com/docs" name="elementNode"/>
        <searchable-expression xmlns:ex="http://marklogic.com/clover/docs-xml">//ex:elementNode</searchable-expression>
      </range>
    </constraint>
  </options>;

let $searchResult := search:search("text1", $options)
return $searchResult

哪个会产生以下结果:

<search:response xmlns="" xmlns:search="http://marklogic.com/appservices/search">
  <search:result index="1" uri="Page1.xml" path="fn:doc(&quot;Page1.xml&quot;)/*:pages/*:page[1]">
    <search:snippet>
      <search:match path="fn:doc(&quot;Page1.xml&quot;)/*:pages/*:page[1]/*:textNode">
        <search:highlight>text1</search:highlight>
      </search:match>
    </search:snippet>
  </search:result>
  <search:facet name="elementNode">
    <search:facet-value name="data1" count="1">data1</search:facet-value>
    <search:facet-value name="data2" count="1">data2</search:facet-value>
    <search:facet-value name="data3" count="1">data3</search:facet-value>
    <search:facet-value name="data4" count="1">data4</search:facet-value>
  </search:facet>
</search:response>

现在我在facet-result中看到一个问题.它应该只返回一个构面值,即从 page1 返回的 data1 ,因为只有 page1 具有所需的搜索表达式" text1 " .相反,facet-result给了我整个文档中所有textNode值的结果.请帮助我-我们如何限制这一点?另外,count给了我整个文档,但是我想要的是页数匹配.

Now I'm seeing a problem in facet-result. It should return only one facet value i.e. data1 from page1 since only page1 has the desired search expression "text1". Instead facet-result giving me result of all textNode values from the whole document. Please help me -- How we can restrict this? Also, count is giving me for whole document but what I want is page count match.

推荐答案

您使用searchable-expression,这会使搜索结果分配到这些元素中.不幸的是,正如mblakele所解释的,对于方面而言,情况并非如此.他建议将页面元素放在自己的文档中,这是这里两种可能的解决方案之一.另一个是将page元素定义为fragment root.您可以在MarkLogic的管理界面中进行操作.您可以在数据库属性中找到它.

You use a searchable-expression, which causes search results to be portioned to those elements. Unfortunately that is not the case for facet counts, as mblakele explains. His suggestion of putting the page elements in their own document is one of two possible solutions here. The other one is defining the page element as fragment root. You can do so in the Admin interface of MarkLogic. You can find it among the database properties.

HTH!

这篇关于Marklogic错误的计数和方面结果Xquery的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆