-
Notifications
You must be signed in to change notification settings - Fork 0
/
Entry.cs
124 lines (112 loc) · 3.76 KB
/
Entry.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
using Lucene.Net.Documents;
using System;
using System.Text;
namespace CdrIndexer
{
class Entry
{
private static readonly int PreviewMaxLength = 100;
private static readonly string DateFormat = "dd.MM.yyyy. H:mm:ss";
public string Hash { get; set; }
public string Path { get; set; }
public string Name { get; set; }
public string Text { get; set; }
public string All { get; set; }
public DateTime ModifiedOn { get; set; }
public float Score { get; set; }
public int PositionByScore { get; set; }
public string TextPreview
{
get
{
if (string.IsNullOrEmpty(this.Text))
{
return "";
}
string text = this.Text;
if (text.Length > PreviewMaxLength)
{
text = text.Substring(0, PreviewMaxLength - 3) + "...";
}
return text.Replace("\r", "").Replace("\n", "");
}
}
public string ModifiedOnText
{
get
{
return this.ModifiedOn.ToString(DateFormat);
}
}
public Entry()
{
}
public Entry(Document doc, float score, int positionByScore)
{
this.Hash = doc.Get("Hash");
this.Path = doc.Get("Path");
this.Name = doc.Get("Name");
this.Text = doc.Get("Text");
this.All = doc.Get("All");
this.ModifiedOn = DateTime.ParseExact(doc.Get("ModifiedOn"), DateFormat, null);
this.Score = score;
this.PositionByScore = positionByScore;
}
public Document ToDocument()
{
var doc = new Document();
doc.Add(new Field("Hash",
this.Hash,
Field.Store.YES,
Field.Index.NOT_ANALYZED));
doc.Add(new Field("Path",
this.Path,
Field.Store.YES,
Field.Index.NOT_ANALYZED));
doc.Add(new Field("Name",
this.Name,
Field.Store.YES,
Field.Index.ANALYZED));
doc.Add(new Field("Text",
this.Text,
Field.Store.YES,
Field.Index.ANALYZED));
doc.Add(new Field("All",
this.All,
Field.Store.YES,
Field.Index.ANALYZED));
doc.Add(new Field("ModifiedOn",
this.ModifiedOn.ToString("dd.MM.yyyy. h:mm:ss"),
Field.Store.YES,
Field.Index.NOT_ANALYZED));
return doc;
}
public void CalculateAll()
{
var all = new StringBuilder();
all.AppendLine(this.Path);
string whitespacePath = SplitPath(this.Path);
all.AppendLine(whitespacePath);
all.AppendLine(Normalize(whitespacePath));
all.AppendLine(SimpleNormalize(whitespacePath));
all.AppendLine(this.Text);
this.All = all.ToString();
}
private string Normalize(string value)
{
return value.ToLower()
.Replace("aa", "ā").Replace("ch", "č").Replace("ee", "ē")
.Replace("ii", "ī").Replace("sh", "š").Replace("uu", "ū");
}
private string SimpleNormalize(string value)
{
return value.ToLower()
.Replace("aa", "a").Replace("ch", "c").Replace("ee", "e")
.Replace("ii", "i").Replace("sh", "s").Replace("uu", "u");
}
private string SplitPath(string path)
{
return string.Join(" ", path.Split('\\', '.', '_'));
}
}
}