package com.browseengine.bobo.test;
import static org.junit.Assert.assertEquals;
import java.util.Arrays;
import java.util.List;
import org.apache.lucene.analysis.standard.StandardAnalyzer;
import org.apache.lucene.document.Document;
import org.apache.lucene.document.Field.Store;
import org.apache.lucene.document.StringField;
import org.apache.lucene.document.TextField;
import org.apache.lucene.index.DirectoryReader;
import org.apache.lucene.index.IndexWriter;
import org.apache.lucene.index.IndexWriterConfig;
import org.apache.lucene.queryparser.classic.QueryParser;
import org.apache.lucene.search.IndexSearcher;
import org.apache.lucene.search.Query;
import org.apache.lucene.search.ScoreDoc;
import org.apache.lucene.search.TopDocs;
import org.apache.lucene.search.TopScoreDocCollector;
import org.apache.lucene.store.RAMDirectory;
import org.apache.lucene.util.Version;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import com.browseengine.bobo.api.BoboBrowser;
import com.browseengine.bobo.api.BoboMultiReader;
import com.browseengine.bobo.api.BrowseHit;
import com.browseengine.bobo.api.BrowseRequest;
import com.browseengine.bobo.api.BrowseResult;
import com.browseengine.bobo.api.BrowseSelection;
import com.browseengine.bobo.facets.FacetHandler;
import com.browseengine.bobo.facets.impl.SimpleFacetHandler;
public class BasicIndexingTest {
private static final String BLUE = "blue";
private static final String RED = "red";
private IndexWriter m_indexWriter;
public BasicIndexingTest() {
// TODO Auto-generated constructor stub
}
@Before
public void setUp() throws Exception {
IndexWriterConfig config = new IndexWriterConfig(Version.LUCENE_43, new StandardAnalyzer(
Version.LUCENE_43));
config.setMaxBufferedDocs(1000);
m_indexWriter = new IndexWriter(new RAMDirectory(), config);
}
@After
public void tearDown() throws Exception {
m_indexWriter.close();
}
@Test
public void testWithInterleavedCommitsUsingBobo() throws Exception {
String text = "text";
Document doc1 = new Document();
doc1.add(new TextField(text, "Foo1", Store.YES));
m_indexWriter.addDocument(doc1);
m_indexWriter.commit();
Document doc2 = new Document();
doc2.add(new TextField(text, "Foo2", Store.YES));
m_indexWriter.addDocument(doc2);
m_indexWriter.commit();
Document doc3 = new Document();
doc3.add(new TextField(text, "Foo3", Store.YES));
m_indexWriter.addDocument(doc3);
m_indexWriter.commit();
List<FacetHandler<?>> handlerList = Arrays.asList(new FacetHandler<?>[] {});
DirectoryReader reader = BoboMultiReader.open(m_indexWriter, true);
BoboMultiReader boboMultiReader = BoboMultiReader.getInstance(reader, handlerList);
BrowseRequest br = new BrowseRequest();
br.setCount(10);
br.setOffset(0);
QueryParser parser = new QueryParser(Version.LUCENE_43, "text", new StandardAnalyzer(
Version.LUCENE_43));
Query q = parser.parse("Foo*");
br.setQuery(q);
BoboBrowser browser = new BoboBrowser(boboMultiReader);
BrowseResult result = browser.browse(br);
int totalHits = result.getNumHits();
BrowseHit[] hits = result.getHits();
assertEquals("should be 3 hits", 3, totalHits);
assertEquals("should be doc 0", 0, hits[0].getDocid());
assertEquals("should be doc 1", 1, hits[1].getDocid());
assertEquals("should be doc 2", 2, hits[2].getDocid());
result.close();
}
@Test
public void testWithSingleCommit() throws Exception {
String text = "text";
Document doc1 = new Document();
doc1.add(new TextField(text, "Foo1", Store.YES));
m_indexWriter.addDocument(doc1);
Document doc2 = new Document();
doc2.add(new TextField(text, "Foo2", Store.YES));
m_indexWriter.addDocument(doc2);
Document doc3 = new Document();
doc3.add(new TextField(text, "Foo3", Store.YES));
m_indexWriter.addDocument(doc3);
m_indexWriter.commit();
List<FacetHandler<?>> handlerList = Arrays.asList(new FacetHandler<?>[] {});
DirectoryReader reader = BoboMultiReader.open(m_indexWriter, true);
BoboMultiReader boboMultiReader = BoboMultiReader.getInstance(reader, handlerList);
BrowseRequest br = new BrowseRequest();
br.setCount(10);
br.setOffset(0);
QueryParser parser = new QueryParser(Version.LUCENE_43, "text", new StandardAnalyzer(
Version.LUCENE_43));
Query q = parser.parse("Foo*");
br.setQuery(q);
BoboBrowser browser = new BoboBrowser(boboMultiReader);
BrowseResult result = browser.browse(br);
int totalHits = result.getNumHits();
BrowseHit[] hits = result.getHits();
assertEquals("should be 3 hits", 3, totalHits);
assertEquals("should be doc 0", 0, hits[0].getDocid());
assertEquals("should be doc 1", 1, hits[1].getDocid());
assertEquals("should be doc 2", 2, hits[2].getDocid());
result.close();
}
@Test
public void testWithInterleavedCommitsUsingLuceneQuery() throws Exception {
String text = "text";
Document doc1 = new Document();
doc1.add(new TextField(text, "Foo1", Store.YES));
m_indexWriter.addDocument(doc1);
m_indexWriter.commit();
Document doc2 = new Document();
doc2.add(new TextField(text, "Foo2", Store.YES));
m_indexWriter.addDocument(doc2);
m_indexWriter.commit();
Document doc3 = new Document();
doc3.add(new TextField(text, "Foo3", Store.YES));
m_indexWriter.addDocument(doc3);
m_indexWriter.commit();
DirectoryReader reader = DirectoryReader.open(m_indexWriter, true);
IndexSearcher searcher = new IndexSearcher(reader);
TopScoreDocCollector docCollector = TopScoreDocCollector.create(100, true);
QueryParser queryParser = new QueryParser(Version.LUCENE_43, "text", new StandardAnalyzer(
Version.LUCENE_43));
Query query = queryParser.parse("Foo*");
searcher.search(query, docCollector);
TopDocs docs = docCollector.topDocs();
ScoreDoc[] scoreDocs = docs.scoreDocs;
assertEquals("should be doc 0", 0, scoreDocs[0].doc);
assertEquals("should be doc 1", 1, scoreDocs[1].doc);
assertEquals("should be doc 2", 2, scoreDocs[2].doc);
reader.close();
}
@Test
public void testWithInterleavedCommitsUsingBoboWithFacets() throws Exception {
String text = "text";
String color = "color";
Document doc1 = new Document();
doc1.add(new TextField(text, "Foo1", Store.YES));
doc1.add(new StringField(color, RED, Store.YES));
m_indexWriter.addDocument(doc1);
m_indexWriter.commit();
Document doc2 = new Document();
doc2.add(new TextField(text, "Foo2", Store.YES));
doc2.add(new StringField(color, RED, Store.YES));
m_indexWriter.addDocument(doc2);
m_indexWriter.commit();
Document doc3 = new Document();
doc3.add(new TextField(text, "Foo3", Store.YES));
doc3.add(new StringField(color, BLUE, Store.YES));
m_indexWriter.addDocument(doc3);
m_indexWriter.commit();
SimpleFacetHandler colorHandler = new SimpleFacetHandler(color);
List<FacetHandler<?>> handlerList = Arrays.asList(new FacetHandler<?>[] { colorHandler });
DirectoryReader reader = DirectoryReader.open(m_indexWriter, true);
BoboMultiReader boboMultiReader = BoboMultiReader.getInstance(reader, handlerList);
BrowseRequest br = new BrowseRequest();
br.setCount(10);
br.setOffset(0);
BrowseSelection red = new BrowseSelection(color);
red.addValue(RED);
red.addValue(BLUE);
br.addSelection(red);
QueryParser parser = new QueryParser(Version.LUCENE_43, "text", new StandardAnalyzer(
Version.LUCENE_43));
Query q = parser.parse("Foo*");
br.setQuery(q);
BoboBrowser browser = new BoboBrowser(boboMultiReader);
BrowseResult result = browser.browse(br);
int totalHits = result.getNumHits();
BrowseHit[] hits = result.getHits();
assertEquals("should be 3 hits", 3, totalHits);
assertEquals("should be doc 0", 0, hits[0].getDocid());
assertEquals("should be doc 1", 1, hits[1].getDocid());
assertEquals("should be doc 2", 2, hits[2].getDocid());
result.close();
}
}