using System.Collections.Generic;
public static void Main()
var index = new GinIndex();
index.Add("Hello World Bogdan", 1);
index.Add("Hello Test World", 2);
index.Add("Test World", 3);
index.Add("Wadf Hello Test World", 4);
var result = index.Search("Hello Test");
foreach (var item in result) {
private static Dictionary<string, HashSet<int>> _index = new Dictionary<string, HashSet<int>>();
public void Add(string text, int identifier) {
.Select(x => x.ToLowerInvariant())
foreach(var word in words) {
if (_index.ContainsKey(word)) {
var records = _index[word];
var records = new HashSet<int>();
_index.Add(word, records);
public int[] Search(string text) {
.Select(x => x.ToLowerInvariant())
var resultSets = new List<HashSet<int>>(words.Length);
foreach(var word in words) {
if (!_index.ContainsKey(word)) {
resultSets.Add(_index[word]);
var result = resultSets[0];
for(int i = 1; i < resultSets.Count; i++) {
result.IntersectWith(resultSets[i]);