Неожиданное поведение "нефильтрованного" поиска в MarkLogic
Нефильтрованный поиск дает неправильные результаты.
пожалуйста, найдите ниже образцы XML и проблемы.
Образец:
<root>
<id1>11</id1>
<elem1>ee1</elem1>
<ele2>ee2</ele2>
<entry>
<volume>10</volume>
<issue>10</issue>
<elemEntry>eleme</elemEntry>
</entry>
<entry>
<volume>20</volume>
<issue>20</issue>
<elemEntry>eleme</elemEntry>
</entry>
<entry>
<volume>20</volume>
<issue>10</issue>
<elemEntry>eleme</elemEntry>
</entry>
<entry>
<volume>10</volume>
<issue>20</issue>
<elemEntry>eleme</elemEntry>
</entry>
</root>
Я должен получить узлы входа со значением комбинации <volume> & <issue>
оба должны присутствовать под <entry>
узел (например: том-10 и выпуск-10, том-10 и выпуск-20)
Как и в приведенном выше примере, мне нужен весь узел входа как <volume> (10), <issue> (10)
,
Он не должен возвращать мне другие узлы входа, так как другие узлы входа не имеют требуемого volume
(значение 10), issue
(значение 10) комбинация.
Пожалуйста, найдите ниже cts:search
что я делаю.
cts:search(
doc("/sample.xml")//entry,
cts:and-query((
cts:element-value-query(xs:QName("volume"), "10", ("case-insensitive","unstemmed")),
cts:element-value-query(xs:QName("issue"), "10", ("case-insensitive","unstemmed"))
)),
"unfiltered"
)
Предположим, образец XML хранится в БД с /sample.xml
URI
Выше запрос возвращает мне другие записи (<entry>
) также.
Если я выполню "фильтрованный" поиск, приведенный выше запрос вернет мне правильные результаты.
Пожалуйста, скажите мне, почему это происходит и каково будет решение.
Если есть какой-либо другой хороший способ получить узлы входа, имеющие комбинацию volume and issue
пожалуйста, дай мне знать.
1 ответ
Вам также следует рассмотреть возможность изменения вашей модели данных. MarkLogic лучше всего использовать, когда 1 документ = 1 строка. У вас будут более эффективные запросы и вы сможете использовать меньшие индексы, если будете следовать этому шаблону. Все индексы ориентированы вокруг фактов в документе, и для получения подобных ограничений на вложенные документы вам необходимо использовать позиции, которые могут стоить дорого, или фильтрованные поиски, которые еще дороже.