0

私は cts:search を次のように使用しています:-

let $query :=
         cts:or-query((
            cts:field-word-query(
              "Assignor Name", $assignorName
            ), 
            cts:field-word-query(
              "Assignee Name", $assigneeName
            )
        )) 
for $patent in cts:search(fn:doc(), $query)[1 to 10]
return $patent

ここで、$assignorName と $assigneeName はユーザーからの入力です。ただし、 $assignorName と $assigneeName の両方が空の文字列の場合、結果は表示されません。ユーザーが何も入力していないときにすべての結果を表示したい。どうすればこれを達成できますか?

4

2 に答える 2

4

より明示的には、クエリを次のように記述できます。

    cts:or-query((
        if (not($assignorName)) then () else cts:field-word-query(
          "Assignor Name", $assignorName), 
        if (not($assigneeName)) then () else cts:field-word-query(
          "Assignee Name", $assigneeName) ))

if-then-else事実上どこにでも式を配置できるという考えに慣れるには、しばらく時間がかかります。場合によっては、これを 3 値論理と考えると役立ちます。

于 2012-04-24T18:54:08.917 に答える
1

すべての結果を取得するには、 current$queryをに置き換える必要がありますcts:and-query(())。ちなみに、 Acts:or-query(())も機能する可能性があります。

チッ!

于 2012-04-24T14:41:16.090 に答える