Поиск MarkLogic с ограничением возвращает неверный результат - PullRequest
0 голосов
/ 10 мая 2018
xquery version "1.0-ml";

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

let $options := 
  <options xmlns="http://marklogic.com/appservices/search">
    <constraint name="city">
      <value>
        <element  name="city"/>
      </value>
    </constraint>
    <sort-order type="xs:string" collation="http://marklogic.com/collation/"
      direction="ascending">
      <element ns="" name="userName"/>
    </sort-order>
  </options>
return search:search("city : Atlanta", $options)

когда я выполняю вышеуказанный запрос на qconsole с помощью city : Atlanta, я получаю правильные данные совпадающих документов (т. Е. 2 ​​совпадения), но когда я выполняю city NE Atlanta, используя вышеуказанный запрос, я получаю неправильный результат ... это означает получение всех Документы, доступные в ОД.

Мое требование: когда я передаю city NE Atlanta, оно должно показывать нулевое совпадение, а не показывать все документы из ML.

Также я не хочу создавать индекс Range для city , потому что это поле может изменяться во время выполнения.

Пожалуйста, поправьте меня, если я ошибаюсь.

1 Ответ

0 голосов
/ 10 мая 2018

При поиске документов сравнения доступны только для запросов диапазона.

API поиска игнорирует недопустимые запросы, что приводит к пустому запросу, который соответствует всем документам в базе данных.

Запросы отрицания, однако, доступны для запросов значений путем добавления префикса к минусу (как в «-city: Atlanta»), что дает:

<cts:not-query xmlns:cts="http://marklogic.com/cts">
  <cts:element-value-query>
    <cts:element>city</cts:element>
    <cts:text xml:lang="en">Atlanta</cts:text>
  </cts:element-value-query>
</cts:not-query>

Получает ли этот запрос ожидаемые вами документы?

Надеясь, что помогает,

...