首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Marklogic REST API通配符搜索

Marklogic REST API通配符搜索
EN

Stack Overflow用户
提问于 2018-06-04 21:26:48
回答 1查看 330关注 0票数 1

我需要为一个集合中的json文档创建分页搜索。文档结构:

代码语言:javascript
复制
{
   "Id": "OBJ-0000",
   "Title": "sample text",
   "Visible": true
}

我在Id、Title和Visible字段上创建了元素范围索引,并创建了搜索选项xml配置:

代码语言:javascript
复制
<?xml  version="1.0" encoding="UTF-8"?>
<search:options xmlns:search="http://marklogic.com/appservices/search">
  <search:constraint name="id">
    <search:range facet="false" type="xs:string">
      <search:json-property>Id</search:json-property>
    </search:range>
  </search:constraint>
  <search:constraint name="title">
    <search:range facet="false" type="xs:string">
      <search:json-property>Title</search:json-property>
    </search:range>
  </search:constraint>
  <search:constraint name="visible">
    <search:value type="boolean">
      <search:json-property>Visible</search:json-property>
    </search:value>
  </search:constraint>
  <search:operator name="sort">
    <search:state name="idAsc">
      <search:sort-order direction="ascending">
        <search:json-property>Id</search:json-property>
      </search:sort-order>
    </search:state>
    <search:state name="idDesc">
      <search:sort-order direction="descending">
        <search:json-property>Id</search:json-property>
      </search:sort-order>
    </search:state>
    <search:state name="titleAsc">
      <search:sort-order direction="ascending">
        <search:json-property>Title</search:json-property>
      </search:sort-order>
      <search:sort-order direction="descending">
        <search:json-property>Id</search:json-property>
      </search:sort-order>
    </search:state>
    <search:state name="titleDesc">
      <search:sort-order direction="descending">
        <search:json-property>Title</search:json-property>
      </search:sort-order>
      <search:sort-order direction="descending">
        <search:json-property>Id</search:json-property>
      </search:sort-order>
    </search:state>
    <search:state name="isvisibleAsc">
      <search:sort-order direction="ascending">
        <search:json-property>Visible</search:json-property>
      </search:sort-order>
      <search:sort-order direction="descending">
        <search:json-property>Id</search:json-property>
      </search:sort-order>
    </search:state>
    <search:state name="isvisibleDesc">
      <search:sort-order direction="descending">
        <search:json-property>Visible</search:json-property>
      </search:sort-order>
      <search:sort-order direction="descending">
        <search:json-property>Id</search:json-property>
      </search:sort-order>
    </search:state>
  </search:operator>
  <search:return-results>true</search:return-results>
  <search:return-metrics>false</search:return-metrics>
  <search:transform-results apply="raw">
  </search:transform-results>
  <search:debug>false</search:debug>
</search:options>

之后,我参考选项文件创建了POST请求:

代码语言:javascript
复制
LATEST/search?format=json&pageLength=20&start=1&options=objectSearch   

使用结构化查询:

代码语言:javascript
复制
 {
    "query": {
      "operator-state": {
        "operator-name": "sort",
        "state-name": "TitleAsc"
      },
      "and-query": {
        "term-query": { "text": "*exam*" }
      }
    }
}

而且它是有效的。但是,当我在“start=1”中使用参数total进行查询时,我得到的结果比实际得到的要多,但是如果我指定了start=20,"total“就会被正确地计算出来。只有当我在搜索词的第一个位置使用带有通配符(*)的搜索参数,并且搜索词包含的字符超过3个时,才会发生这种情况。我如何解决这个问题?

EN

回答 1

Stack Overflow用户

发布于 2018-06-05 21:26:04

从文档中:

https://docs.marklogic.com/search:search

search:search的输出返回一个元素,该元素又包含一个total属性。total属性的值是一个估计值,基于查询的索引解析,不会对其进行准确性筛选。索引解析的准确性取决于数据库的索引配置、查询和正在搜索的数据。

这意味着只有在为您的查询打开了所有必需的索引时,您才会收到准确的总数。

使用这里推荐的通配符索引设置应该可以帮助您获得准确的总数:https://docs.marklogic.com/guide/search-dev/wildcard#id_14163

从您上面的评论来看,您似乎在代码点排序规则中缺少一个单词词典。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50681755

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档