2016-10-21 8 views
0

は、例えばのために...検索文法を使用して可能である:私はチェーン名「PL-1」を含む文書を検索したい私たちは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とPL-2を検索したい場合はdoc 1だけを取得する必要があり、doc2だけを取得する必要があります。

これはSearch 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") 

DOC 1に一致する、あなたの最初の例のクエリを返します。 :

PL-1 PL-2 -PL-3 

<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に一致するクエリの文字列を作成することができます

+0

実際には、文書内にチェーンがいくつあるのか分かりません。検索文字列に指定された名前だけを含む文書を探しているので、これは機能しません。 – Ravi

+0

@Ravi実際にあなたが尋ねた質問とは全く異なる質問です。すべての制約を記述する必要があります。さもなければ、誰があなたが尋ねたものよりも難しい問題に対する解決策で答えてくれるのでしょうか?あなたが望むものは可能ですが、より複雑なので、新しい質問を作成してください。 – wst