Lucene を使用してソース コードのインデックスを作成したいと考えています。ソース コードは、コンパイラ プラグインを使用して事前に分析されています。コンパイラの出力は、ソース コードに表示される ID のリストです。各 ID には、次の情報が含まれています。
- ID が定義されたモジュール (使用されているのではなく)、
- ID が表示されるソース スパン (つまり、line:col-line:col)、および
- ID がこの場所で定義されているか、単にここで使用されているか。
たとえば、このソース コード モジュール (疑似コード) が与えられた場合
module MyModule
from MyOtherModule import bar
foo = ...
print bar
コンパイル時にコンパイラが出力する可能性のあるものは次のMyModule
とおりです。
MyModule.foo,3:1-3:3,definition
MyOtherModule.bar,4:7-4:9,use
ソースではそのように表示されない場合でも、出力に表示されるすべての ID が完全修飾されていることに注意してください。これが、コンパイラを使用する理由です。コンパイラを使用すると、純粋なテキストベースの検索よりも正確なコード検索を実行できます。
質問: メタデータ (つまり、完全修飾 ID と、ID が特定の場所で定義または使用されているかどうか) がスコアリング時に利用できるように、上記のコンパイラ出力にインデックスを付けるカスタム トークナイザーとアナライザーを作成することは可能ですか?書類?
より正確には、各用語をそれが定義されたモジュールに関連付けたいと思います (たとえば、関連付けられたfoo
メタデータ: module= を定義しますMyModule
)。投稿リスト内の各投稿に、この特定の ID の外観がその ID の定義または使用であったかどうかを格納する必要があります。
また、非修飾 ID を修飾 ID のシノニムとして Lucene に保存してもらいたいです。これにより、ユーザーは「foo」を検索し、ID「Module1.foo」および「Module2.foo」を含むすべてのドキュメントを取得できます。