2017-03-29 15 views
2

Luceneをプロジェクトに統合する作業を進めています。現在私は保存と検索に問題はありませんが、IDでの削除は機能していません。私が間違っていることは何ですか?Lucene:IDで削除できない

保存コード:あなたのIDをインデックス用のテキストフィールドを使用しているので、

Propably
@Override 
    public void deleteById(long groupId,int objectId, boolean type) { 
     try { 
      Path path = //Path to index directory; 
      Directory directory = org.apache.lucene.store.FSDirectory.open(path); 
      IndexWriterConfig config = new IndexWriterConfig(new SimpleAnalyzer()); 
      IndexWriter indexWriter = new IndexWriter(directory, config); 
      indexWriter.deleteDocuments(new Term("id",String.valueOf(objectId))); 
      indexWriter.commit(); 
      indexWriter.close(); 
      directory.close(); 
     }catch (Exception e){ 
      e.printStackTrace(); 
     } 

    } 

答えて

2

@Override 
    public void saveIndexes(String text,String filePath, long groupId, boolean type, int objectId) 

    Directory directory = org.apache.lucene.store.FSDirectory.open(path); 
      IndexWriterConfig config = new IndexWriterConfig(new SimpleAnalyzer()); 
      IndexWriter indexWriter = new IndexWriter(directory, config); 
      doc.add(new TextField("id",String.valueOf(objectId),Field.Store.YES)); 
    indexWriter.addDocument(doc); 
      indexWriter.commit(); 
      indexWriter.close(); 
      directory.close(); 
} 

コードを削除します。 IDの索引付けにはStringフィールドを使用します。

索引付けが、トークン化されていないフィールド:全体の文字列値を単一のトークンとして索引付けされ

理由:DOCはそう言ったようStringfieldsをトークン化するつもりはありません。たとえば、これは「国のために使用される可能性がありますフィールドまたは「ID」フィールドは

はこちらをご覧ください:http://lucene.apache.org/core/6_4_1/core/org/apache/lucene/document/StringField.html

+0

は、私が代わりにIntFieldを使用する必要がありますか? IntFieldを使用しても削除コードは同じままですか? –

+0

どのluceneバージョンを使用していますか? Lucene 6.4.1には私が使用しているIntPointフィールドがありますが、これは範囲または通常の照会目的でのみ使用されます。 StringFieldで試しましたか?これはうまくいくはずです。 – dom

+0

私はLucene 5.4.1を持っています。 stringFieldを使用するか、保存するための削除を意味しますか? –

関連する問題