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
Надеюсь, что это помогает,