Restrict cts: поиск, чтобы установить количество элементов xml
У меня есть cts:query
и я хотел бы ограничить свой cts:query
искать только некоторые элементы XML. Это возможно без создания каких-либо индексов полей или изменения моего cts:query
, Как мой cts:query
очень большой.. когда я делаю это
cts:search((
//es:raw/wos_dps:REC/wos_dps:static_data/wos_dps:summary/wos_dps:titles/wos_dps:title,
//es:raw/wos_dps:REC/wos_dps:static_data/ wos_dps:fullrecord_metadata/ wos_dps:abstracts/ wos_dps:abstract
)
,
$q,
('unfiltered'))[1 to 10]
где $q
мой cts:query
как пример ниже. Я получаю выражение неисследимым.. Как этого достичь?.. просто чтобы завершить мой код, следующее мое cts:query
ниже приведен лишь пример, он намного больше cts:query
:)
cts:and-query(
(
cts:or-query(
(
cts:near-query(
(
cts:or-query((
cts:word-query("Guideline", ("case-insensitive", "punctuation-insensitive", "whitespace-insensitive", "wildcarded")),
cts:word-query("guidelines", ("case-insensitive", "punctuation-insensitive", "whitespace-insensitive", "wildcarded"))
)
)
,
cts:or-query((
cts:word-query("clinical", ("case-insensitive", "punctuation-insensitive", "whitespace-insensitive", "wildcarded")),
cts:word-query("practice", ("case-insensitive", "punctuation-insensitive", "whitespace-insensitive", "wildcarded")),
cts:word-query("adherence", ("case-insensitive", "punctuation-insensitive", "whitespace-insensitive", "wildcarded"))
)
)
)
,
4,
('unordered'))
,
cts:near-query((
cts:word-query("phase", ("case-insensitive", "wildcarded")),
cts:or-query((
cts:word-query("0", ("case-insensitive", "wildcarded")),
cts:word-query("1", ("case-insensitive", "wildcarded")),
cts:word-query("2", ("case-insensitive", "wildcarded")),
cts:word-query("3", ("case-insensitive", "wildcarded")),
cts:word-query("4", ("case-insensitive", "wildcarded")),
cts:word-query("i", ("case-insensitive", "wildcarded")),
cts:word-query("ii", ("case-insensitive", "wildcarded")),
cts:word-query("iii", ("case-insensitive", "wildcarded")),
cts:word-query("iv", ("case-insensitive", "wildcarded"))
)))
,
0,
('unordered')),
cts:near-query((
cts:or-query((
cts:word-query("phase2*", ("case-insensitive", "wildcarded")),
cts:word-query("phase1*", ("case-insensitive", "wildcarded")),
cts:word-query("phase0*", ("case-insensitive", "wildcarded")),
cts:word-query("phase4*", ("case-insensitive", "wildcarded")),
cts:word-query("phase3*", ("case-insensitive", "wildcarded")),
cts:word-query("phasei*", ("case-insensitive", "wildcarded")),
cts:word-query("phaseii*", ("case-insensitive", "wildcarded")),
cts:word-query("phaseiii*", ("case-insensitive", "wildcarded")),
cts:word-query("phaseiv*", ("case-insensitive", "wildcarded"))
)),
cts:or-query((
cts:word-query("trail*", ("case-insensitive", "wildcarded")),
cts:word-query("study", ("case-insensitive", "wildcarded")),
cts:word-query("studies*", ("case-insensitive", "wildcarded"))
))
),
1,
('unordered')),
)
),
cts:collection-query(("http://xxxx/entity/wos/article")),
cts:element-attribute-value-query((xs:QName(xs:QName("wos_dps:pub_info"))),
(xs:QName("wos_dps:pubyear")),
"2017")
)
,
("unordered"))
1 ответ
Чтобы ответить на ваш основной вопрос, вы можете использовать cts: element-query, чтобы ограничить запрос конкретным элементом.
Ваш запрос имеет много возможностей для оптимизации. Я не ожидаю, что это будет масштабироваться против больших наборов данных. Я настоятельно рекомендую вам использовать любые ресурсы MarkLogic, с которыми вы контактируете, посмотреть, что вы пытаетесь сделать, и оценить свой подход.