2015-03-30 3 views
0

Я новичок в MarkLogic, и мы оцениваем MarkLogic для нашего использования продукта.И ИЛИ Поиск запроса с использованием MarkLogic (XQuery или эквивалент)

Мы оценили несколько баз данных NoSQL, как MongoDB, Couchbase и т.д.

Ищу ниже, типа поиска запроса.

(Condition1 ИЛИ Condition2) И (ИЛИ Condition3 Condition4) И (Condition5)

Может MarkLogic обеспечить такой тип поискового запроса?

Я только начал изучать MarkLogic и пытался понять архитектуру.

Спасибо, Самир

ответ

2

Да, MarkLogic предоставляет некоторые библиотеки высокого уровня для этого вида функциональных возможностей. Посмотрите на Search API.

Начала здесь: https://developer.marklogic.com/learn/2009-07-search-api-walkthrough

И более подробная документация здесь: https://docs.marklogic.com/guide/search-dev/search-api

+2

И в зависимости от того, что Condition1 через Condition5 на самом деле, библиотеки высокого уровня может оказаться ненужным, потому что сам по себе XQuery обеспечивает логическое операторы. –

0

Короткий ответ на исходный вопрос «да». Детали «как» будут зависеть от подхода, используемого для выражения запросов.

The reference architecture рекомендует трехуровневый подход с использованием Java или Node.js Client APIs, если вы используете один из тех, или HTTP вызовов на REST API, если вы используете другой язык в своем среднем уровне.

Вы также можете использовать API поиска (как указано wst), если вы работаете на сервере приложений MarkLogic (обычно это двухуровневая архитектура). Вы можете сделать это либо с помощью XQuery, либо с сервера на JavaScript, как и MarkLogic 8.

1

MarkLogic может обрабатывать такую ​​логику многими способами, как упомянуто.
Например, это то, как вы могли бы настроить поисковый запрос с использованием библиотеки CTS (я очень рекомендую библиотеку CTS, так как он использует индексы намного лучше, и строительство их настолько более гибкими):

cts:search(//elementName, 
    cts:and-query((
    cts:element-attribute-value-query(xs:QName("entry"), xs:QName("private"), "true"), 
    cts:or-query((
     cts:element-attribute-value-query(xs:QName("entry"), xs:QName("forced"), "false"), 
     cts:element-attribute-value-query(xs:QName("entry"), xs:QName("forced"), "pending") 
    )) 
    )) 
) 

Этот фрагмент показывает логику AND и OR. Функции cts:and-query() и cts:or-query() могут принимать список узлов. В приведенном выше запросе говорится: «Найти элемент (называемый elementName), который имеет атрибут private =« true »И имеет либо одно из следующих значений: принудительное = 'true' или принудительное = 'pending'".

Для более простых данных, вы можете использовать XQuery предиката, делая что-то вроде следующего:

for $node in $xml/parent/child[@param1 eq "test" AND @param2 eq "OK"]/grandchild[@service eq "yahoo" or @service eq "google"] 
    return $node 
Смежные вопросы