高度な検索を行うには?

検索ツールは、複数のサブインデックスを含むインデックスによって駆動されます。基本的な検索のためにツールを使用する場合、これらのインデックスのうちの2つだけが使用されます: コンテキスト・インデックスとコンテンツ・インデックスです。 コンテンツインデックスは、コンテンツのダイジェスト版の保存されトークン化されたフルテキストインデックスを含んでいます。 つまり、リソースにアップロードされた Word 文書は、そのすべてのテキストが抽出されインデックス化されていますが、ビデオ パッケージはメタデータのみがインデックス化されます。 検索結果が返されると、このコンテンツが、一致する単語とともにハイライトされて表示されます。

コンテキストインデックスは、コンテンツのソースのキーワードインデックスを提供します。これはコンテンツを含むワークサイトまたはコースです。 検索ツールが基本検索を実行すると、+content:<currentsiteid>という検索語が追加されます。<currentsiteid>は検索が実行されているコンテキストまたはサイトIDです。 "現在のサイト内を検索 "という条件になります。

どのインデックス内でも単語を検索することができます。例えば、お知らせだけを検索したい場合は、+tool:announcement +content:cowslip とすると、cowslipという単語を含むお知らせだけを検索することができます。

現在、このインデックスには、以下の名前のインデックスが含まれています。

  • content:検索対象文書の内容を要約し、トークン化して保存したインデックス
  • context:検索対象文書のソースコンテキストのキーワード格納インデックス
  • tool:検索対象文書を生成するツール名のキーワード格納インデックス
  • title:検索対象文書のタイトルをトークン化して格納したインデックス
  • reference:Sakai Entityリファレンスのキーワード格納インデックス

検索へ移動します。

サイト内のツールメニューから検索ツールをクリックします。

高度な検索オプション

以下の検索情報を使って、検索ボックスに高度な検索文字列を入力してください。

Lucene検索情報

クエリーエンジンは、Apache Luceneをベースにしています。完全性を期すため、Apache Query のドキュメントを以下に掲載します。 より詳細な情報はhttps://lucene.apache.org/core/2_9_4/queryparsersyntax.htmlをご覧ください。

用語解説

クエリーは、単語と演算子に分解されます。単語には2つのタイプがあります。単一条件とフレーズです。

単一条件は、"test "や "hello "などの単一の単語です。

フレーズは、"hello dolly "のように二重引用符で囲まれた単語のグループです。

複数の単語をブール演算子で組み合わせて、より複雑なクエリを構成することができます(下記参照)。

注:インデックス作成に使用されるアナライザは、クエリー文字列の語句に対して使用されます。そのため、クエリ文字列で使用される単語に干渉しないアナライザを選択することが重要です。

フィールド

Lucene はフィールド付きデータをサポートしています。検索を行う際には、フィールドを指定するかデフォルトのフィールドを使用するかのいずれかを選択します。フィールド名とデフォルトのフィールドは、実装に依存します。

フィールド名の後にコロン「:」を入力し、さらに探したい言葉を入力すると、任意のフィールドを検索することができます。

例として、Lucene インデックスに title と text の 2 つのフィールドがあり、text がデフォルトのフィールドである場合に、 「The Right Way」というタイトルのドキュメントで、「don't go this way,」というテキストが含まれているものを探したい場合は、 以下のように入力します。

title:"The Right Way" AND text:go

or

title:"Do it right" AND right

textはデフォルトのフィールドであるため、「text:」の指定なしでも検索を行えます。

注:フィールドは、最初のスペースまでの単語に対してのみ有効であるため、クエリ

title:Do it right

とした場合、titleフィールドで「Do」だけを検索します。textフィールドで、「it」と「right」を検索します。

用語モディファイア

Luceneは、クエリ用語の変更をサポートしており、幅広い検索オプションを提供します。

ワイルドカード検索

Lucene は、1 文字および複数文字のワイルドカード検索をサポートしています。

1文字のワイルドカード検索を行うには、"? "記号を使用します。

複数文字のワイルドカード検索を行う場合は、"*"記号を使用します。

一文字ワイルドカード検索は、一文字を置き換えたものに一致する単語を検索します。例えば、"text"や "test"を検索するには、次のように検索します。

te?t

複数文字のワイルドカード検索は、0文字以上を検索します。例えば、test、tests、testerを検索する場合は、次のように検索します。

test*

また、単語の途中でワイルドカード検索を使用することも可能です。

te*t

注意:*や?の記号を検索の最初の文字として使用することはできません。

あいまい検索

Lucene は、レーベンシュタイン距離 (編集距離) アルゴリズムに基づくあいまい検索をサポートしています。 あいまい検索を行うには、チルダ記号 "~"を単語の最後に使用します。例えば、"roam" と似たスペルの単語を探すには、次のようなあいまい検索を使用します。

roam~

この検索では、「foam」や「roams」などの単語が検索されます。

Lucene 1.9 以降では、追加のオプションパラメータで必要な類似度を指定することができます。値は「0」から「1」の間で、「1」に近いほど類似度の高い単語のみがマッチングされます。たとえば

roam~0.8

パラメータを指定しない場合のデフォルトは0.5である。

近傍検索

Lucene は、特定の範囲内にある単語を検索することをサポートしています。近傍検索を行うには、フレーズの最後にチルダ記号 "~" を使用します。 たとえば、あるドキュメントで "apache" と "jakarta" が「10」語以内かどうかを調べるには、次のように検索を行います。

"jakarta apache"~10

範囲検索

範囲指定クエリによって、フィールドの値が指定された下限値と上限値の間にある文書を検索することができます。範囲指定は、上限と下限を含むことも、含まないこともできます。ソートは辞書式に行われます。

mod_date:[20020101 TO 20030101]

これは、mod_date フィールドの値が"20020101"から"20030101"の間である文書を検索します。 範囲指定クエリは、日付フィールドのために用意されたものではなく、日付以外のフィールドでも範囲指定クエリを使用することができます。

title:{Aida TO Carmen}

これは、タイトルが"Aida"と"Carmen"の間にあり、"Aida"と"Carmen"を含まない文書をすべて検索します。

包括的範囲の場合は"[]"で指定します。排他的範囲の場合は"{}"で指定します。

用語ブースト

Luceneは、見つかった単語を元に、マッチしたドキュメントの関連性レベルを提供します。用語ブーストをするには、キャレット"^" とブーストファクター (数値) を検索する単語の末尾に記述します。 ブーストファクターが高いほど、その単語の関連性が高くなります。

用語ブーストすることで、文書の関連性を制御することができます。

"jakarta apache"という検索をする際に、"jakarta"という単語の関連性をブーストしたい場合は、キャレットとブーストファクターを使用して次のように入力します。

jakarta^4 apache

これにより、"jakarta"という単語を含む文書の関連性がより高く表示されるようになります。次の例のようにブーストとすることもできます。

"jakarta apache"^4 "Apache Lucene"

ブーストファクターは正の値でなければなりませんが、1より小さい値でもかまいません(例:0.2)。

ブール演算子

ブール演算子では、論理演算子によって単語を組み合わせることができます。Lucene は、論理演算子として AND、"+"、OR、NOT および "-" をサポートしています (注意: 論理演算子は ALL CAPS でなければなりません)。

OR

OR演算子はデフォルトの接続演算子です。2つの単語の間にブール演算子がない場合、OR演算子が使用されます。OR演算子は、2つの単語をリンクし、いずれかの単語が文書内に存在する場合に、一致する文書を見つけます。 これは、集合を使った和集合に相当します。ORの代わりに記号||を使うことができます。

"jakarta apache"または"jakarta"だけを含む文書を検索するには、次のクエリを使用します。

"jakarta apache" jakarta

または

"jakarta apache" OR jakarta

AND

AND演算子は、両方の単語が存在する文書を検索マッチします。これは、集合を使った交差に相当します。ANDの代わりに&&という記号を使うことができます。

"jakarta apache" と "Apache Lucene" を含む文書を検索するには、次のクエリを使用します。

"jakarta apache" AND "Apache Lucene"

+

必須演算子は、"+"記号の後の単語が必ず存在する文書を検索します。

"jakarta "を必ず含み、かつ "lucene"を含む文書を検索するには、次のクエリを使用します。

+jakarta lucene

NOT

NOT演算子は、NOTの後に続く単語を含む文書を除外します。これは、集合を用いた差分と同じです。NOTの代わりに記号!を使うこともできます。

"jakarta apache" を含むが "Apache Lucene" を含まない文書を検索するには、次のクエリを使用します。

"jakarta apache" NOT "Apache Lucene"

注意:NOT演算子は、1つの単語だけでは使用できません。例えば、次のような検索では、結果は得られません。

NOT "jakarta apache"

-

禁止演算子は、"-"記号の後に単語を含む文書を除外します。

"jakarta apache" を含むが "Apache Lucene" を含まない文書を検索するには、次のクエリを使用します。

"jakarta apache" - "Apache Lucene"

グループ化

Luceneは、括弧を使用して句をグループ化し、サブクエリを形成することをサポートしています。これは、クエリのブーリアンロジックを制御する際に非常に便利です。

"jakarta"または"apache"と"website"のいずれかを検索するには、次のクエリを使用します。

(jakarta OR apache) AND website

websiteが存在し、jakartaまたはapacheのいずれかの単語が存在する文章が検索されます。

フィールドグループ化

Luceneは、括弧を使用して複数の句を1つのフィールドにグループ化することをサポートしています。

タイトルに "return"と "pink panther"の両方を含む場合は、次のクエリで検索します。

title:(+return +"ink panther")

特殊文字のエスケープ

Luceneは、クエリ構文の一部である特殊文字のエスケープをサポートしています。現在の特殊文字の一覧は以下のとおりです。

+ - && || ! ( ) { } [ ] ^ " ~ * ? : \

これらの文字をエスケープするには、その文字の前に "\"を使用します。例えば、"(1+1):2"を検索するには、次のように指定します。

\(1\+1\)\:2