[PC] FlexLuceneのメモ書き~IndexWriterConfigOpenModeとGetLiveDocsと~
FlexLuceneのメモ書き(その1)
FlexLuceneを使っていて、気づいたことを書き残しておこうと思います。
IndexWriterConfigOpenMode
Fieldを作る際に用いたStringField()関数でも少し気になっていたのですが、通常のLuceneと違っているところがあることに気づきました。Luceneでは、「Field.Store.YES」となっている部分をFlexLuceneでは、「FieldStore.YES」とFieldとStoreとの間にドット’.’は入れない記載方法を採用しています。IndexWriterConfigのモードを修正する際も、IndexWriterConfig.OpenModeでなくてIndexWriterConfigOpenModeと記載するようです。どうやら定数などの定義は、個別に分かれていないようです(C#の制限ですか?!)。
IndexWriterConfigのデフォルト
IndexWriterConfigのデフォルトは、CREATE_OR_APPENDでした。Lucene.NET (Luceneのバージョン2.9.3)で作っていたときは、CREATEだったみたいで、AddDocument()しても新たにインデックスを作り直しだったのですが、FlexLuceneは、Luceneのバージョン6.3.0で、少し変わっているようです。
GetLiveDocs(生きてる文書の確認)
DeleteDocument()した文書(Document)も残っているようで、それがDeletedなのかそうでないのか文書を調べる必要があります。
IndexReaderをreaderとして、以下のような感じで生きている文書のみを確認することができました。liveDocsがnullならDeleted文書がないってことに気づくのに時間がかかってしまいました。
int maxNum = reader.MaxDoc(); Document doc; Bits liveDocs = MultiFields.GetLiveDocs(reader); for (int i = 0; i < maxNum; i++) { if ( !(liveDocs == null) && liveDocs.Get(i) == false) { continue; } doc = reader.Document(i); }