Проблема с cts: and-query в Marklogic

У меня есть XML-документ. Структура документов такая: -

<?xml version="1.0" encoding="UTF-8"?>
<patent-assignment>
  <assignment-record>
    <correspondent>
      <name>NORTH AMERICA INTERNATIONAL PATENT OFFIC</name>
      <address-1>P.O. BOX 506</address-1>
      <address-2>MERRIFIELD, VA 22116</address-2>
    </correspondent>
  </assignment-record>
  <patent-assignors>
    <patent-assignor>
      <assignor-name>TSAI, YU-WEN</name>
      <execution-date>
        <date>20050331</date>
      </execution-date>
    </patent-assignor>
    <patent-assignor>
      <assignor-name>HUANG, CHENG-I</name>
      <execution-date>
        <date>20050331</date>
      </execution-date>
    </patent-assignor>
  </patent-assignors>
  <patent-assignees>
    <patent-assignee>
      <assignee-name>FARADAY TECHNOLOGY CORP.</name>
      <address-1>NO.10-2, LI-HSIN ROAD 1, SCIENCE-BASED INDUSTRIAL PARK</address-1>
      <city>HSIN-CHU CITY</city>
      <country-name>TAIWAN</country-name>
    </patent-assignee>
  </patent-assignees>
</patent-assignment>

Я создал поля на assignor-name и assignee-name. Теперь я выполняю запрос cts:search следующим образом: -

let $query:=cts:and-query((

    cts:element-query(xs:QName("assignor-name"), 
      cts:field-word-query("Assignor Name", "apple")),
    cts:element-query(xs:QName("assignee-name"), 
      cts:field-word-query("Assignee Name", "salix"))
  ))

for $x in cts:search(fn:doc(), $query)
return $x

где Assignor Name и Assignee Name - имена созданных мной полей. И эти поля имеют assignor-name и assignee-name в качестве локального имени соответственно. Но когда я запускаю этот запрос, он дает мне пустую последовательность. Я также проверил свои xml-документы, и в них есть данные, где assignor-name - "яблоко", а assignee-name - "salix", но я не получаю результата. Когда я запускаю этот запрос только для имени исполнителя или имени исполнителя, я получаю результаты, но когда я объединяю их в and-query, я не получаю никаких результатов. Пожалуйста помоги.


person Puneet Pant    schedule 18.05.2012    source источник
comment
Пунит, ваши образцы данных не соответствуют тому, что вы пытаетесь сделать: ваш запрос использует пространство имен (pa :), которое не отображается в ваших данных, а также отсутствует яблоко и salix. Не могли бы вы обновить образец, который должен соответствовать?   -  person Dave Cassel    schedule 18.05.2012


Ответы (2)


Помимо проблемы пространства имен, на которую указал Дейв, комбинация element-query и field-query необычна и, вероятно, не приведет к удовлетворительным результатам.

В этом запросе вы можете отказаться от обоих в пользу простого cts:element-word-query для элемента.

person mblakele    schedule 18.05.2012

Да, вы можете использовать функцию cts:element-word-query следующим образом:

cts:and-query((cts:element-word-query(xs:QName("pa:assignor-name"),
                                      "apple",
                                      "case-insensitive"
                                      ),
              cts:element-word-query(xs:QName("pa:assignee-name"),
                                     "salix",
                                      "case-insensitive")
              ))
person Sofia    schedule 15.04.2013