[Tips] Krugle Searchの使い方 - krugle-jp/Krugle-Library GitHub Wiki

Krugle では、次のいずれかの方法で特定のファイル、ドキュメント、または情報レコードを検索することができます。

  1. Krugle検索ボックスに一致する1つ以上のキーワードを入力
  2. 詳細検索ダイアログに(複数行の)スニペット文字列を入力

このドキュメントでは、上記1.に焦点を当て、特定の検索コマンドを入力して情報を検索するテクニックをまとめます。


1. 2つの検索タイプ

検索キーワードとは、文字、数字、記号の並びで表現します。 Krugle は、単一のキーワードだけでなく、複数のキーワードの組み合わせでも検索できます。 以下の2つの検索モードを使い分けて組み合わせることで、完全一致、部分一致、パターン一致といった用語を作成できます。

検索モードは、「検索」ボタンのすぐ左にあるドロップダウン メニューで指定します。


基本検索モード

  • デフォルトの検索モードで、記号、数字、文字を含む技術用語、ソフトウェア構文パターン、部品番号、識別子を検索する最も簡単な方法です。
  • 特殊文字に対する制限が最小限であるため、多くの技術検索用語を直接入力できます。

例: PET/CT78816        *code_Name         a[i]-a[0]        object.method.option

_フレーズクエリー "Hello, world!\n"

  • 文字列の内容(大文字と小文字を区別しない)を含むファイルを検索します。 例:Hello, world!\n

コードフラグメント   .initial_form_count()

  • .initial_form_count()、特殊記号. ( )をエスケープすることなくリテラル用語を含むファイルを検索できます。

Solr検索モード

  • 表現力豊かなApache Solr検索構文に基づいた高度な検索モードです。
  • 前方一致や後方一致を含むワイルドカードの利用、特定の語根を含むキーワードの検索、論理的な表現の組み合わせ、正規表現による検索など、豊富なSolrクエリオプションが使用できます。

フレーズクエリ "Hello, world!\n"

  • 文字列の内容(大文字と小文字を区別しない)を含むファイルを検索します。例:Hello, world!\n

ワイルドカードマッチング

  • *(アスタリスク)は任意の文字または文字グループを表すために使用できます。
  • 注意点: ワイルドカード検索はかなりの時間を要する可能性がありますのでご留意ください

前方一致クエリ  assert*

  • assertで始まるすべての用語、例えばassertEquals、assertTrue、assertFalseなどを検索します。

*後方一致クエリ  *binding

  • bindingで終わる用語、例えばhttpBindingやServiceBinding、earlyBindingを含むファイルを検索します。
  • 注: これは潜在的に非常に遅いクエリであるため、他のクエリ方法が不可能な場合にのみ使用してください。

正規表現クエリ  /[0-9]{3}[h|o][5-9][0-9]/

  • クエリ内容を前後/で囲うことにより、正規表現による検索ができます。
  • Krugle SearchのSolr検索モードでの正規表現については本ドキュメント下部にて、実例を交えご案内しています。
/foo*bar/
/foo+bar/
  • 正規表現はトークンをまたがっては適用されないことに注意してください。

  • 例えば001H99をヒットさせるためには、以下のように指定します。

/[0-9]{3}[h|o][5-9][0-9]/
- `[0-9]{3} 3 桁の数字で始まる
- `[h|o}`  その後に`h`、`H`、`o`、または`O` のいずれかの 1 文字が続く
- `[5-9][0-9]` その後に50`から`99`までの2 桁の数字で終わる

使用できる文字

  • キーワードには任意のUnicode文字を使用できますが、以下の文字は予約語であり、指定する際には\(バックスラッシュ)でエスケープしてください。
+ - && || ! ( ) { } [ ] ^ " ~ * ? :\ /
  • さらに、"(二重引用符)で囲まれた文字 (二重引用符を除く) は、文字どおりに解釈されます。
"[email protected]"

近接性

  • ~(チルダ記号)は、指定した距離内の語句を検索するために使用できます。
  • 例えば完全一致は近接度~0、単語の転置(foo barではなくbar foo)は近接度~1となります
"foo bar"
"foo bar"~3

2. 推奨フィルター

Krugle のデフォルトの検索結果セットには、ファイルまたはファイルのメタデータ(ファイル名、プロジェクト、コメントなど)の任意の部分で見つかった一致が表示されます。検索キーワード修飾子を使用すると、用語が一致する場所に基づいて結果を絞り込むことができます。

project btree project:alpha

  • alphaプロジェクト内でbtreeという語句を含むファイルを検索します

lang btree lang:java

  • Java言語で書かれたファイルの中で、btreeという語句を含むファイルを検索します

filename jaxb filename:"pom.xml", btree filename:*.h

  • jaxbという語句を含むファイルで、pom.xmlというファイル名のファイルを検索します

filename (ワイルドカードを含む)  btree filename:*.h

  • btreeという語句を含むファイルで、*.hに該当するファイル名のファイルを検索します

path  btree path:"src/main/java"

  • パスsrc/main/java以下で、btreeという語句を含むファイルを検索します

comment  comment:btree

  • コードファイルのコメントセクションにbtreeという語句を含むファイルを検索します

classdef  classdef:btree

  • 名前にbtreeを含むクラスの定義を含むファイルを検索します

functiondef  functiondef:btree

  • 名前にbtree を含む関数、サブルーチン、メソッドの定義を含むファイルを検索します

functioncall  functioncall:btree

  • 名前にbtreeを含む関数、サブルーチン、メソッドの呼出しを含むファイルを検索します

3. 項演算子

個別の用語指定を 組み合わせて1 つの検索リクエストを構成することができます。

組み合わせ  "alpha test" btree filename:"*.pdf" path:src/text

  • 複数の修飾子と検索語を1つのクエリに組み合わせます。
  • ファイルパスsrc/text以下の*.pdfに該当するファイル(PDFファイル)の中で、alpah testとbtreeという語句を含むファイルを検索します

-(マイナス) "text/xml" -"utf-8"

  • text/xmlという語句を含み、かつutf-8という語句を含まないファイルを検索します

〜 "alpha test"~10

  • 指定した用語のn語以内にあるファイルを検索します。
  • この例では、alphaから前後10語以内にtestがある

4. 検索結果ページのナビゲーション

結果ファイル内の検索ヒット間を移動するには、次のキーボード ショートカットを使用します。

次の検索結果   n,N,j,J

前の検索結果   p,P,k,K


5. 付録:Krugle Search における正規表現指定方法

以下にドキュメントでは、Krugle SearchのSolr検索モードで使用することができる正規表現(Regex)検索機能について、実例を交えて解説します。

  • Krugleでサポートする正規表現は、いわゆるPerl互換の正規表現ではありません。
  • Krugle では、コード検索の用途に特化して厳選した様々な演算子をサポートしています。

基本的な使用方法として、正規表現構文の前後を/(スラッシュ)で囲います。

使用できる特殊記号は以下の通りで、もしこれらをの特殊記号をキーワードとして指定する場合には\(バックスラッシュ)でエスケープしてください。

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

また、"(ダブルクオーテーション)で囲まれた文字はそのまま検索対象となります。

john"@regex-demo.com"

|(パイプ記号)はOR条件として指定します。

# 検索対象の例: aabb

aabb|bbaa    # match
aacc|bb      # no match
aa(cc|bb)    # match
a+|b+        # no match
a+b+|b+a|    # match
a+(b|c)+     # match

付録:Solr検索モードでの正規表現を使用した検索キーワードの記入方法

以下、実例を交えたキーワード指定を例示します。(match = 合致、no match = 不一致)

**ワイルドカード指定

# 検索対象の例:  abcde

abcd       # no match
ab.*       # match
ab...      # match
a.c.e      # match
# 検索対象の例: aaabbb

a+b+      # match
aa+bb+    # match
a+.+      # match
aa+bbb+   # match

a*b*      # match
a*b+c*    # match
.*bbb.*   # match
aaa*bbb*  # match

**アルファベット文字列の指定

[abc]       #`a` or `b` or `c`
[a-c]       #`a` or `b` or `c`
[-abc]      # `-` or `a` or `b` or `c`
[abc\-]     # `-` or `a` or `b` or `c`
[^abc]      # `a`, `b`, `c`を除くいずれかのキャラクター
[^a-c]      # `a`, `b`, `c`を除くいずれかのキャラクター
[^-abc]     # `-`, `a`, `b`, `c`を除くいずれかのキャラクター
[^abc\-]    # `-`, `a`, `b`, `c`を除くいずれかのキャラクター

**数字の指定

{5}       # 直前で指定した条件を5回連続
{2,5}     # 直前で指定した条件を2~5回連続
{2,}      # 直前で指定した条件を2回以上連続