MarkLogic按示例查询返回不正确的结果

时间:2017-11-20 15:44:55

标签: node.js search marklogic marklogic-9

您好我不熟悉使用MarkLogic 9与NodeJS一起查询并尝试使用QBE(按示例查询),因为它在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个记录的订单号。你能告诉我我做错了吗?

MarkLogic中的源xml文件采用以下格式:

<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>

曼尼谢谢

埃里克

1 个答案:

答案 0 :(得分:3)

通过结果列表在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#slice

希望有帮助,