2017-02-06 3 views
3

Я использую MarkLogic v8.Использование Java API для ограничения контейнера (вложенный)

Я пытаюсь применить контейнер ограничение на структурированном запрос возвращать только документы со значением х в элементе с (вложенные в элементы и б).

queryBuilder.containerConstraint() принимает параметр для имени параметра и определения StructuredQueryDefinition. Мой вариант выглядит следующим образом:

<options xmlns='http://marklogic.com/appservices/search'> 
    <constraint name='language'> 
     <element name=\"name\" ns=\"\"/> 
    </constraint> 
</options> 
  1. «имя» является имя внутреннего элемента (с), содержащий значение, я хочу сослаться на. Это как вариант должен быть сконструирован, или вместо него следует «называть» имя наивысшего элемента?

  2. Как должно быть построено StructuredQueryDefinition (принятое в качестве параметра на containerConstraint())? Должен ли я писать необработанный XML или использовать методы построения?

  3. Есть ли лучший способ сделать это? У меня уже есть рабочий поиск Term, я просто должен иметь возможность фильтровать с помощью набора свойств внутри документа.

ответ

3

Я думаю, что я нашел ответ:

Вариант был следующим:

<search:options 
     xmlns:search='http://marklogic.com/appservices/search'> 
    <search:constraint name='language'> 
     <search:word> 
      <search:element name='name' ns=''/> 
     </search:word> 
    </search:constraint> 
</search:options> 

Тогда называется вариант в слове Constraint:

queryBuilder.wordConstraint("language", MY_LANGUAGE) 

Это, как представляется, сделать чего я хотел.

+2

Это выглядит правильно для меня. Вы также можете использовать containerQuery(), как описано в http://docs.marklogic.com/javadoc/client/com/marklogic/client/query/StructuredQueryBuilder.html#containerQuery(com.marklogic.client.query.StructuredQueryBuilder.ContainerIndex ,% 20com.marklogic.client.query.StructuredQueryDefinition) – ehennum

Смежные вопросы