Неожиданное поведение "нефильтрованного" поиска в 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 строка. У вас будут более эффективные запросы и вы сможете использовать меньшие индексы, если будете следовать этому шаблону. Все индексы ориентированы вокруг фактов в документе, и для получения подобных ограничений на вложенные документы вам необходимо использовать позиции, которые могут стоить дорого, или фильтрованные поиски, которые еще дороже.

Другие вопросы по тегам