我有一系列可搜索的术语,我想通过这堆文件基本上使用Lucene CTRL-F,并在该堆文档中查找并存储所有这些术语的位置。例如:
条款:“A”,“B”,“C”
Doc1:“创造” Doc2:“一辆大车” Doc3:“DOUBLE TROUBLE”
如果我查询字母“A”,我希望能够说有3个“A”:
这样的事情。我怎样才能做到这一点?到目前为止,我只是使用像这样的StandardAnalyzer:
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文件之外的所有文档。如何保留其他文件以进行查询?
答案 0 :(得分:0)
要对任意字符位置编制索引,您可以使用NGramTokenizer。在创建索引时,您还应使用FieldType.setStoreTermVectors(true);
和FieldType.setStoreTermVectorPositions(true);
,以便实际存储术语的位置。请查看具有正确代码的question,以检索问题中已有的术语位置。