Я пытался использовать Lucene для индексации нашей базы данных кода. К сожалению, некоторые термины не включены в указатель. Например. в строке ниже я могу искать что угодно, кроме "номер версии":
version-number "cAELimpts.spl SCOPE-PAY:10.1.10 25nov2013kw101730 Setup EMployee field if missing"
Я попытался реализовать его как с Lucene.NET 3.1, так и с pylucene 6.2.0, с тем же результатом.
Вот некоторые подробности моей реализации в Lucene.NET:
using (var writer = new IndexWriter(FSDirectory.Open(INDEX_DIR), new CustomAnalyzer(), true, IndexWriter.MaxFieldLength.UNLIMITED))
{
Console.Out.WriteLine("Indexing to directory '" + INDEX_DIR + "'...");
IndexDirectory(writer, docDir);
Console.Out.WriteLine("Optimizing...");
writer.Optimize();
writer.Commit();
}
Класс CustomAnalyzer:
public sealed class CustomAnalyzer : Analyzer
{
public override TokenStream TokenStream(System.String fieldName, System.IO.TextReader reader)
{
return new LowerCaseFilter(new CustomTokenizer(reader));
}
}
Наконец, класс CustomTokenizer:
public class CustomTokenizer : CharTokenizer
{
public CustomTokenizer(TextReader input) : base(input)
{
}
public CustomTokenizer(AttributeFactory factory, TextReader input) : base(factory, input)
{
}
public CustomTokenizer(AttributeSource source, TextReader input) : base(source, input)
{
}
protected override bool IsTokenChar(char c)
{
return System.Char.IsLetterOrDigit(c) || c == '_' || c == '-' ;
}
}
Похоже, что «номер версии» и некоторые другие термины не индексируются, потому что они присутствуют в 99% документов. Может ли это быть причиной проблемы?
РЕДАКТИРОВАТЬ: По запросу класс FileDocument:
public static class FileDocument
{
public static Document Document(FileInfo f)
{
// make a new, empty document
Document doc = new Document();
doc.Add(new Field("path", f.FullName, Field.Store.YES, Field.Index.NOT_ANALYZED));
doc.Add(new Field("modified", DateTools.TimeToString(f.LastWriteTime.Millisecond, DateTools.Resolution.MINUTE), Field.Store.YES, Field.Index.NOT_ANALYZED));
doc.Add(new Field("contents", new StreamReader(f.FullName, System.Text.Encoding.Default)));
// return the document
return doc;
}
}
version-number
, которое вы пытались проиндексировать, - это одно длинное значение, о котором идет речь? Вы не показали своюDocument
структуру, предоставьте эту часть. - person Sabir Khan   schedule 31.05.2017