MarkLogic версия 9.0-6.2
Мне нужно принять входные данные (скажем, PolicyId) в массиве и вернуть все документы в коллекции, соответствующие списку PolicyIds.Индекс диапазона элементов создается на PolicyId, и я могу сделать это с помощью запроса ниже.Код работает, как и ожидалось.
const PolList = ["pol1","pol2","pol3"]
cts.search(
cts.jsonPropertyRangeQuery("RegistrationId", "=",PolList)
)
Теперь я пытаюсь сделать то же самое с API поиска (search.search).Я создал файл опций и развернул его в базе данных модулей
{
"options":
{
"search-option": "unfiltered",
"additional-query":[
"<collection-query xmlns='http://marklogic.com/cts'>
<uri>registration</uri>
</collection-query>"
],
"constraint": [
{
"name": "policyId",
"range": {
"type": "xs:string",
"collation" : "http://marklogic.com/collation/codepoint",
"element": {"name": "PolicyId" }
}
}
],
"extract-document-data":
{
"selected": "all"
}
}
}
Затем я использую приведенный ниже код для извлечения документов.
const SearchOptions = fn.head(xdmp.invokeFunction(
function() {
return fn.doc("/Default/data-hub-FINAL/rest-
api/options/PolicyId.xml");
},
{
'database': xdmp.database('data-hub-MODULES')
}));
const result = fn.head(search.search('PolicyId:'+PolicyId,
SearchOptions.firstChild)).xpath('search:result/search:extracted/data()',
{'search': 'http://marklogic.com/appservices/search'});
Этот код работает нормально для одного PolicyId.Как я могу передать массив PolicyIds и заставить его работать?Я хочу получить все документы одним вызовом базы данных.