2016-10-21 2 views
0

Я задавался вопросом, что я хочу, это возможно, используя поиск грамматику .. Для например: допустим 3 документаML Поиск Грамматика

doc 1: 
    <seq> 
     <chain><name>PL-1</name></chain> 
    </seq> 
doc 2: 
    <seq> 
     <chain><name>PL-1</name></chain> 
     <chain><name>PL-2</name></chain> 
    </seq> 
doc 3: 
    <seq> 
     <chain><name>PL-1</name></chain> 
     <chain><name>PL-2</name></chain> 
     <chain><name>PL-3</name></chain> 
    </seq> 

Я хочу найти документы, содержащие имена цепей «PL-1». и ничего больше .. поэтому для этого критерия поиска мне нужно получить только документ 1, если я хочу искать PL-1 и PL-2, я должен получить только doc2

Возможно ли это с помощью поиска Grammar ??

ответ

1

поиск по умолчанию грамматика использует минус (-) в качестве стартера маркеров, который транслирует в инверсный запрос, так что вы можете использовать это:

xquery version "1.0-ml"; 

import module namespace search = "http://marklogic.com/appservices/search" 
at "/MarkLogic/appservices/search/search.xqy"; 

search:parse("PL-1 -PL-2 -PL-3") 

Это возвращает запрос для первого примера, соответствующий документ 1 :

<cts:and-query xmlns:cts="http://marklogic.com/cts"> 
    <cts:word-query> 
    <cts:text xml:lang="en">PL-1</cts:text> 
    </cts:word-query> 
    <cts:not-query> 
    <cts:word-query> 
     <cts:text xml:lang="en">PL-2</cts:text> 
    </cts:word-query> 
    </cts:not-query> 
    <cts:not-query> 
    <cts:word-query> 
     <cts:text xml:lang="en">PL-3</cts:text> 
    </cts:word-query> 
    </cts:not-query> 
</cts:and-query> 

Используя тот же метод, вы можете создать строку для запроса, который соответствует только документ 2:

PL-1 PL-2 -PL-3 
+0

На самом деле, я не знаю, сколько цепей существует в документе. Так что это не сработает, поскольку я ищу документы, содержащие только имена, указанные в строке поиска. – Ravi

+0

@Ravi. На самом деле это совсем другой вопрос, который вы задали. Вы должны указать все свои ограничения; в противном случае, почему кто-нибудь ответил бы с решением более сложной проблемы, чем тот, который вы задали? То, что вы хотите, возможно, но более сложное, поэтому, пожалуйста, создайте новый вопрос. – wst

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