MarkLogic Query By Example возвращает неверный результат

Здравствуйте, я новичок в запросах с MarkLogic 9 в сочетании с NodeJS и попробуйте использовать QBE (Query By Example), как это упоминается в примере MarkLogic 9 ( https://docs.marklogic.com/guide/search-dev/qbe) Когда я использую xquery со следующим утверждением:

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

let $items := fn:collection()/scope/item
for $i in $items
  let $sscc := $i/*:transaction/*:sscc/text()
  let $type:= $i/*:transaction/*:type/text()
  let $actorId := $i/*:transaction/*:actorId/text()
  let $device := $i/*:transaction/*:device/text()
  let $ordernummer := $i/*:order/*:orderNumber/text()
  where $ordernummer = 3788888
  return <td>{$sscc}</td>

Который возвращает 46 правильных результатов. Когда я пытаюсь сделать это с QBE с:

exports.postQuery = function(req, res) {


var queryInput = req.body.message
  console.info('Start postQuery!!!')
  console.info(queryInput)
  db.documents.query(
    //qb.where(qb.byExample(
    //  queryInput
    qb.byExample({
      $query: {
        orderNumber: {$word : '3788888'},
        $filtered: true
      },
      $format: 'json'
}))

он возвращает 10 результатов вместо 46. Не имеет значения, какой номер заказа я использую, все возможности показывают 10 записей. Подскажите, пожалуйста, что я делаю не так.

Исходные XML-файлы в MarkLogic имеют следующий формат:

<scope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    <item>
        <transaction>
            <type>CI</type>
            <sscc>00000379471900000025</sscc>
            <location>4260210630688</location>
            <device>VISTALINK.004</device>
            <date>2017-04-25</date>
            <time>02:15:33</time>
            <gmtOffset>+02:00</gmtOffset>
            <actorId>155081</actorId>
        </transaction>
        <order>
            <orderNumber>3794719</orderNumber>
        </order>
        <load>
            <rti>
                <ean>8714548186004</ean>
                <grai>8003087145481860040019877322</grai>
                <column>2</column>
                <size>
                    <width>1900</width>
                    <height>95</height>
                    <depth>0</depth>
                </size>
                <position>
                    <x>2062,48707520218</x>
                    <y>2015,24337520512</y>
                    <z>0</z>
                </position>
            </rti>
            <rti>
                <ean>8714548106002</ean>
                <grai>8003087145481060020016434653</grai>
                <column>0</column>
                <size>
                    <width>1900</width>
                    <height>95</height>
                    <depth>0</depth>
                </size>
                <position/>
            </rti>
            <rti>
                <ean>8714548186004</ean>
                <grai>8003087145481860040012803719</grai>
                <column>2</column>
                <size>
                    <width>1900</width>
                    <height>95</height>
                    <depth>0</depth>
                </size>
                <position>
                    <x>2064,20629390666</x>
                    <y>2124,57539157396</y>
                    <z>0</z>
                </position>
            </rti>
            <rti>...</rti>
            <rti>...</rti>
            <rti>...</rti>
            <rti>...</rti>
            <rti>...</rti>
        </load>
    </item>
</scope>

Мэнни спасибо

Erik

1 ответ

Решение

Поисковые запросы на странице клиента MarkLogic по списку результатов. Длина страницы по умолчанию составляет 10 результатов.

Чтобы получить больше результатов, используйте метод среза, чтобы указать длину. Чтобы получить все результаты, вы можете использовать постоянную JavaScript MAX_SAFE_INTEGER:

qb.where(qb.byExample(...))
  .slice(0, Number.MAX_SAFE_INTEGER)
  .withOptions({search: ['filtered']})

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

Для получения дополнительной информации см.:

http://docs.marklogic.com/jsdoc/queryBuilder.html

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

Другие вопросы по тегам