Marklogic REST API поиск по шаблону - PullRequest
0 голосов
/ 04 июня 2018

Мне нужно создать постраничный поиск для документов JSON в одной коллекции.Структура документа:

{
   "Id": "OBJ-0000",
   "Title": "sample text",
   "Visible": true
}

Я создал индексы диапазона элементов в полях Id, Title и Visible и параметры поиска xml:

<?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-запрос со ссылкой на параметрыфайл:

LATEST/search?format=json&pageLength=20&start=1&options=objectSearch   

со структурированным запросом:

 {
    "query": {
      "operator-state": {
        "operator-name": "sort",
        "state-name": "TitleAsc"
      },
      "and-query": {
        "term-query": { "text": "*exam*" }
      }
    }
}

и все работает.Но, однако, когда я делаю запрос с параметром start = 1 , в "total" я получаю больше результатов, чем на самом деле, но если я указал start =Например, 20 , "total" рассчитывается правильно.Это происходит только тогда, когда я использую параметры поиска с подстановочным знаком (*) на первом месте в поисковом запросе, а термин содержит более 3 символов.Как я могу решить эту проблему?

1 Ответ

0 голосов
/ 05 июня 2018

Из документации:

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

Вывод search: search возвращает элемент, который в свою очередь содержит атрибут total.Значением атрибута total является оценка, основанная на разрешении индекса запроса, и она не фильтруется для точности.Точность разрешения индекса зависит от конфигурации индекса базы данных, запроса и данных, которые ищутся.

Это означает, что вы получите точную сумму только тогда, когда все необходимыедля вашего запроса включены индексы.

Использование рекомендуемых здесь параметров подстановочного индекса должно помочь вам получить точные итоговые значения: https://docs.marklogic.com/guide/search-dev/wildcard#id_14163

В приведенном выше комментарии вы, похоже, пропустили словарный запас слов.в сопоставлении кодов.

...