Leitarvélin á barnaland.is hefur verið frekar slöpp uppá síðkastið, fyrst var ég að nota einfalt LIKE á umræðuna en að sjálfsögðu þegar það voru komnar nokkur þúsund umræður þá hætti það að duga. Næst á dagskrá var að nota Full-text möguleika í SQL Server en það er ekki alveg að gera sig.
Lucene.Net leitarvélin kemur frá
jakarta verkefni og er upphaflega java verkefni(eins og svo margt annað gott). Það er frekar einfalt að útfæra leitarvélina. Indexa texta er einhvernvegin svona.
Analyzer a = new StandardAnalyzer(stopWords);
string[] stopWords = new string[]
{
"og", "að", "eða", "það", "var", "í",
"við", "á", "þar", "er", "um", "til",
"þetta"
};
IndexWriter iw = new IndexWriter(pathToIndex, a, true);
Document doc = new Document();
doc.Add(Field.UnIndexed("id", 1));
doc.Add(Field.UnIndexed("headline", "Fyrirsögn"));
doc.Add(Field.UnStored("content", "fyrirsögn" + "texti"));
iw.AddDocument(doc);
iw.Optimize();
iw.Close();
Hugmyndin er svo að láta indexinn keyra sem windows service. Hann mundi svo keyra á 2ja tíma fresti til þess að indexa nýjar umræður sem hafa komið inn eftir að síðast var indexað.
Leitarvélin svo sjálf er nokkuð öflug, hún bíður uppá ýmsa
valmöguleika til að leita, hvort sem er með AND, OR, NOT, dagsetningum, grúppu leit og einhver annar slatti.
Að leita virkar einhvernvegin svona.
IndexSearcher indexSearcher = new IndexSearcher(pathToIndex);
Query query = QueryParser.Parse(searchString,"content",new StandardAnalyzer());
Document doc;
Hits hits = indexSearcher.Search(query);
for (int i = 0; i < hits.Length(); i++)
{
doc = hits.Doc(i);
Console.WriteLine(doc.Get("headline"));
Console.WriteLine(doc.Get("id"));
}
Að sjálfsögðu tekur leitin rétt um 0 sekúndur að keyra líkt allar eðlilegar leitarvélar. Það verður gaman að fá loksins almennilega leitarvél á barnalandið