FileDocCategorySizeDatePackage
TestSpansAdvanced.javaAPI DocApache Lucene 1.95570Mon Feb 20 09:19:28 GMT 2006org.apache.lucene.search.spans

TestSpansAdvanced

public class TestSpansAdvanced extends TestCase
Tests the span query bug in Lucene. It demonstrates that SpanTermQuerys don't work correctly in a BooleanQuery.
author
Reece Wilton

Fields Summary
protected Directory
mDirectory
private static final String
FIELD_ID
protected static final String
FIELD_TEXT
Constructors Summary
Methods Summary
protected voidaddDocument(org.apache.lucene.index.IndexWriter writer, java.lang.String id, java.lang.String text)
Adds the document to the index.

param
writer the Lucene index writer
param
id the unique id of the document
param
text the text of the document
throws
IOException


        final Document document = new Document();
        document.add(new Field(FIELD_ID, id, Field.Store.YES, Field.Index.UN_TOKENIZED));
        document.add(new Field(FIELD_TEXT, text, Field.Store.YES, Field.Index.TOKENIZED));
        writer.addDocument(document);
    
protected voidassertHits(org.apache.lucene.search.Hits hits, java.lang.String description, java.lang.String[] expectedIds, float[] expectedScores)
Checks to see if the hits are what we expected.

param
hits the search results
param
description the description of the search
param
expectedIds the expected document ids of the hits
param
expectedScores the expected scores of the hits
throws
IOException


        // display the hits
        /*System.out.println(hits.length() + " hits for search: \"" + description + '\"');
        for (int i = 0; i < hits.length(); i++) {
            System.out.println("  " + FIELD_ID + ':' + hits.doc(i).get(FIELD_ID) + " (score:" + hits.score(i) + ')');
        }*/

        // did we get the hits we expected
        assertEquals(expectedIds.length, hits.length());
        for (int i = 0; i < hits.length(); i++) {
            assertTrue(expectedIds[i].equals(hits.doc(i).get(FIELD_ID)));
            assertEquals(expectedScores[i], hits.score(i), 0);
        }
    
protected voiddoTestBooleanQueryWithSpanQueries(float expectedScore)
Tests two span queries.

throws
IOException


        final Query spanQuery = new SpanTermQuery(new Term(FIELD_TEXT, "work"));
        final BooleanQuery query = new BooleanQuery();
        query.add(spanQuery, BooleanClause.Occur.MUST);
        query.add(spanQuery, BooleanClause.Occur.MUST);
        final Hits hits = executeQuery(query);
        final String[] expectedIds = new String[] { "1", "2", "3", "4" };
        final float[] expectedScores = new float[] { expectedScore, expectedScore, expectedScore, expectedScore };
        assertHits(hits, "two span queries", expectedIds, expectedScores);
    
protected org.apache.lucene.search.HitsexecuteQuery(org.apache.lucene.search.Query query)
Executes the query and throws an assertion if the results don't match the expectedHits.

param
query the query to execute
throws
IOException


        final IndexSearcher searcher = new IndexSearcher(mDirectory);
        final Hits hits = searcher.search(query);
        searcher.close();
        return hits;
    
protected voidsetUp()
Initializes the tests by adding 4 identical documents to the index.


                    
         

        super.setUp();

        // create test index
        mDirectory = new RAMDirectory();
        final IndexWriter writer = new IndexWriter(mDirectory, new StandardAnalyzer(), true);
        addDocument(writer, "1", "I think it should work.");
        addDocument(writer, "2", "I think it should work.");
        addDocument(writer, "3", "I think it should work.");
        addDocument(writer, "4", "I think it should work.");
        writer.close();
    
protected voidtearDown()


        mDirectory.close();
        mDirectory = null;
    
public voidtestBooleanQueryWithSpanQueries()
Tests two span queries.

throws
IOException


        doTestBooleanQueryWithSpanQueries(0.3884282f);