我的Lucene代码有什么问题



我有一系列可搜索的术语,我想使用lucene基本上通过此堆栈进行ctrl-f,并在该堆栈中查找和存储所有这些术语的位置文件。例如:

术语:" A"," B"," C"

doc1:"创造"DOC2:"一辆大车"DOC3:"双重麻烦"

如果我询问字母" a",我想能够说有3个" A":

  • doc1位置4
  • doc2位于位置1
  • doc2位置8

这样的东西。我怎样才能做到这一点?到目前为止,我只是在使用类似的标准分析仪:

public Analyzer _analyzer = new StandardAnalyzer(Lucene.Net.Util.Version.LUCENE_30);
// for some directory defined here
using (var indexWriter = new IndexWriter(directory, _analyzer, true, new IndexWriter.MaxFieldLength(IndexWriter.DEFAULT_MAX_FIELD_LENGTH)))
{
    using (var textReader = new StreamReader(blobStream))
    {
        // this code should analyze and write my indexes to the lucene instance
        var text = await textReader.ReadToEndAsync();
        var document = new Document();
        document.Add(new Field("Text", text, Field.Store.NO, Field.Index.ANALYZED, Field.TermVector.WITH_POSITIONS_OFFSETS));
        document.Add(new Field("DocId", docId.ToString(), Field.Store.YES, Field.Index.NOT_ANALYZED));
        document.Add(new Field("FamilyId", familyId.ToString(), Field.Store.YES, Field.Index.NOT_ANALYZED));
        indexWriter.AddDocument(document);
    }
}

lucene最初会生成很多文档,但除了.cfs文件之外,所有文档都会删除。如何保留其他文件进行查询?

要在任意字符位置上索引,您可以使用ngramTokenizer。在创建索引时,您还应使用FieldType.setStoreTermVectors(true);FieldType.setStoreTermVectorPositions(true);,以便实际存储了术语的位置。看看这个问题,该问题具有正确的代码,以检索问题中的术语位置。

最新更新