我的Lucene代码怎么了?

我的Lucene代码怎么了?,lucene,lucene.net,Lucene,Lucene.net,我有一个可搜索的术语数组,我想使用Lucene在这堆文档中基本上按CTRL-F键,并在这堆文档中查找和存储所有这些术语的位置。例如: 术语:“A”、“B”、“C” 文件1:“创造” Doc2:“一辆大轿车” Doc3:“双重麻烦” 如果我询问字母“A”,我想说有3个“A”: Doc1在位置4 Doc2在位置1 Doc2在位置8 差不多吧。我该怎么做?到目前为止,我只是在使用这样的标准分析器: public Analyzer _analyzer = new StandardAnalyzer(L

我有一个可搜索的术语数组,我想使用Lucene在这堆文档中基本上按CTRL-F键,并在这堆文档中查找和存储所有这些术语的位置。例如:

术语:“A”、“B”、“C”

文件1:“创造” 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文件以外的所有文档。如何保存其他文件以执行查询?

要对任意字符位置进行索引,可以使用。创建索引时,还应使用
FieldType.setStoreTermVectors(true)
字段类型。设置存储项向量位置(true)以便实际存储术语的位置。看看这个问题,它有正确的代码来检索问题中已有的术语位置。

如何将
FieldType
融入我的代码中?
FieldType
Field
的属性吗?我不明白。该示例仅将
FieldType
显示为一个浮动对象。我不知道它与
文档
对象、
分析器
对象或
索引阅读器
对象有什么关系。我刚刚意识到您可以使用Lucene major版本3?这是正确的吗?如果是这样,请更新到合理的版本(至少5个,更好6个)。是的,我正在使用Lucene.NET 3.0.3。我的老板是个.NET迷。我不知道.NET版本是否赶上java版本。这有什么不同吗?Lucene.NET 3.0.3的发行说明可以追溯到2012年10月26日星期五。这东西已经过时了。似乎至少有一个4.8-ish版本可用(),但这仍然远远落后于6.4.2版本中的原始Lucene(主要版本4和5也带来了重大更改和更新)。