vgquotes/Tests/VideoGameQuotes.Api.Tests/LuceneTests.cs

53 lines
1.7 KiB
C#

using System;
using Lucene.Net.Analysis.Standard;
using Lucene.Net.Documents;
using Lucene.Net.QueryParsers;
using Lucene.Net.Search;
using NUnit.Framework;
using VideoGameQuotes.Api.Search.Lucene;
namespace VideoGameQuotes.Api.Tests {
[TestFixture, Ignore]
public class LuceneTests {
[Test]
public void Should_use_lucene() {
var analyzer = new StandardAnalyzer(new [] { "the", "of", "a", "an" });
const string indexDirectory = @"c:\users\tmont\code\lucene_index_test";
var indexWriter = new Lucene.Net.Index.IndexWriter(indexDirectory, analyzer, true);
indexWriter.AddDocument(CreateDocument(4, "cat"));
indexWriter.AddDocument(CreateDocument(5, "catty"));
indexWriter.AddDocument(CreateDocument(6, "Catherine"));
indexWriter.AddDocument(CreateDocument(7, "vacate"));
indexWriter.AddDocument(CreateDocument(8, "cat cat cat"));
indexWriter.AddDocument(CreateDocument(9, "i'm trying to herd a cat, a cat, I say!"));
indexWriter.AddDocument(CreateDocument(10, "the cat"));
indexWriter.Optimize();
indexWriter.Close();
var parser = new QueryParser("text", analyzer);
var query = parser.Parse("cat");
var searcher = new IndexSearcher(indexDirectory);
var hits = searcher.Search(query).ToEnumerable();
foreach (var hit in hits) {
Console.WriteLine("id: {0}, document: {1}, score: {2}", hit.GetId(), hit.GetDocument(), hit.GetScore());
}
}
private static Document CreateDocument(int id, string text) {
var document = new Document();
document.Add(new Field("id", id.ToString(), Field.Store.YES, Field.Index.UN_TOKENIZED));
document.Add(new Field("text", text, Field.Store.YES, Field.Index.TOKENIZED));
return document;
}
}
}