Example usage for org.apache.lucene.search IndexSearcher IndexSearcher

List of usage examples for org.apache.lucene.search IndexSearcher IndexSearcher

Introduction

In this page you can find the example usage for org.apache.lucene.search IndexSearcher IndexSearcher.

Prototype

public IndexSearcher(IndexReaderContext context) 

Source Link

Document

Creates a searcher searching the provided top-level IndexReaderContext .

Usage

From source file:at.ac.univie.mminf.luceneSKOS.analysis.SKOSLabelFilterTest.java

License:Apache License

@Test
public void queryParserSearch() throws IOException, ParseException {

    Document doc = new Document();
    doc.add(new Field("content", "The quick brown fox jumps over the lazy dog", Field.Store.YES,
            Field.Index.ANALYZED));

    writer.addDocument(doc);/*from  w  w w  .  java 2  s. c  o m*/

    searcher = new IndexSearcher(IndexReader.open(writer, false));

    Query query = new QueryParser(Version.LUCENE_36, "content", skosAnalyzer).parse("\"fox jumps\"");

    Assert.assertEquals(1, TestUtil.hitCount(searcher, query));

    Assert.assertEquals("content:\"fox (jumps hops leaps)\"", query.toString());
    Assert.assertEquals("org.apache.lucene.search.MultiPhraseQuery", query.getClass().getName());

    query = new QueryParser(Version.LUCENE_36, "content", new StandardAnalyzer(Version.LUCENE_36))
            .parse("\"fox jumps\"");
    Assert.assertEquals(1, TestUtil.hitCount(searcher, query));

    Assert.assertEquals("content:\"fox jumps\"", query.toString());
    Assert.assertEquals("org.apache.lucene.search.PhraseQuery", query.getClass().getName());

}

From source file:at.ac.univie.mminf.luceneSKOS.analysis.SKOSLabelFilterTest.java

License:Apache License

@Test
public void testTermQuery() throws CorruptIndexException, IOException, ParseException {

    Document doc = new Document();
    doc.add(new Field("content", "I work for the united nations", Field.Store.YES, Field.Index.ANALYZED));

    writer.addDocument(doc);/*from   w w w .  j av  a 2s.  c  o  m*/

    searcher = new IndexSearcher(IndexReader.open(writer, false));

    QueryParser parser = new QueryParser(Version.LUCENE_36, "content", new SimpleAnalyzer(Version.LUCENE_36));

    Query query = parser.parse("united nations");

    Assert.assertEquals(1, TestUtil.hitCount(searcher, query));

}

From source file:at.ac.univie.mminf.luceneSKOS.analysis.SKOSURIFilterTest.java

License:Apache License

@Test
public void singleUriExpansionWithStoredField() throws CorruptIndexException, IOException {

    Document doc = new Document();
    doc.add(new Field("subject", "http://example.com/concept/1", Field.Store.YES, Field.Index.ANALYZED));

    writer.addDocument(doc);//from  ww  w.j  av a 2s . c om

    searcher = new IndexSearcher(IndexReader.open(writer, false));

    Query query = new TermQuery(new Term("subject", "leaps"));

    TopDocs results = searcher.search(query, 10);
    Assert.assertEquals(1, results.totalHits);

    Document indexDoc = searcher.doc(results.scoreDocs[0].doc);

    String[] fieldValues = indexDoc.getValues("subject");

    Assert.assertEquals(1, fieldValues.length);

    Assert.assertEquals(fieldValues[0], "http://example.com/concept/1");

}

From source file:at.ac.univie.mminf.luceneSKOS.analysis.SKOSURIFilterTest.java

License:Apache License

@Test
public void singleUriExpansionWithUnstoredField() throws CorruptIndexException, IOException {

    Document doc = new Document();
    doc.add(new Field("subject", "http://example.com/concept/1", Field.Store.NO, Field.Index.ANALYZED));

    writer.addDocument(doc);/* w  w w . j  av  a 2 s.c o m*/

    searcher = new IndexSearcher(IndexReader.open(writer, false));

    Query query = new TermQuery(new Term("subject", "jumps"));

    TopDocs results = searcher.search(query, 10);
    Assert.assertEquals(1, results.totalHits);

    Document indexDoc = searcher.doc(results.scoreDocs[0].doc);

    String[] fieldValues = indexDoc.getValues("subject");

    Assert.assertEquals(0, fieldValues.length);

}

From source file:at.ac.univie.mminf.luceneSKOS.analysis.SKOSURIFilterTest.java

License:Apache License

@Test
public void multipleURIExpansion() throws CorruptIndexException, IOException {

    Document doc = new Document();
    doc.add(new Field("subject", "http://example.com/concept/1", Field.Store.YES, Field.Index.ANALYZED));
    doc.add(new Field("subject", "http://example.com/concept/2", Field.Store.YES, Field.Index.ANALYZED));

    writer.addDocument(doc);//from  www .jav  a2s .  c  o  m

    searcher = new IndexSearcher(IndexReader.open(writer, false));

    // querying for alternative term of concept 1
    Query query = new TermQuery(new Term("subject", "hops"));

    TopDocs results = searcher.search(query, 10);
    Assert.assertEquals(1, results.totalHits);

    Document indexDoc = searcher.doc(results.scoreDocs[0].doc);

    String[] fieldValues = indexDoc.getValues("subject");

    Assert.assertEquals(2, fieldValues.length);

    // querying for alternative term of concept 2
    query = new TermQuery(new Term("subject", "speedy"));

    results = searcher.search(query, 10);
    Assert.assertEquals(1, results.totalHits);

    indexDoc = searcher.doc(results.scoreDocs[0].doc);

    fieldValues = indexDoc.getValues("subject");

    Assert.assertEquals(2, fieldValues.length);

}

From source file:at.ac.univie.mminf.luceneSKOS.LabelbasedTermExpansionTest.java

License:Apache License

/**
 * This test indexes a sample metadata record (=lucene document) having a
 * "title", "description", and "subject" field.
 * /* w w  w  .ja  v  a2 s.c  om*/
 * A search for "arms" returns that record as a result because "arms" is
 * defined as an alternative label for "weapons", the term which is contained
 * in the subject field.
 * 
 * @throws IOException
 */
@Test
public void labelBasedTermExpansion() throws IOException {

    /* defining the document to be indexed */
    Document doc = new Document();
    doc.add(new Field("title", "Spearhead", Field.Store.YES, Field.Index.ANALYZED));
    doc.add(new Field("description",
            "Roman iron spearhead. The spearhead was attached to one end of a wooden shaft..."
                    + "The spear was mainly a thrusting weapon, but could also be thrown. "
                    + "It was the principal weapon of the auxiliary soldier... "
                    + "(second - fourth century, Arbeia Roman Fort).",
            Field.Store.NO, Field.Index.ANALYZED));
    doc.add(new Field("subject", "weapons", Field.Store.NO, Field.Index.ANALYZED));

    /* setting up the SKOS analyzer */
    String skosFile = "src/test/resources/skos_samples/ukat_examples.n3";

    /* ExpansionType.URI->the field to be analyzed (expanded) contains URIs */
    Analyzer skosAnalyzer = new SKOSAnalyzer(matchVersion, skosFile, ExpansionType.LABEL);

    /* Define different analyzers for different fields */
    Map<String, Analyzer> analyzerPerField = new HashMap<String, Analyzer>();
    analyzerPerField.put("subject", skosAnalyzer);
    PerFieldAnalyzerWrapper indexAnalyzer = new PerFieldAnalyzerWrapper(new SimpleAnalyzer(matchVersion),
            analyzerPerField);

    /* setting up a writer with a default (simple) analyzer */
    writer = new IndexWriter(new RAMDirectory(), new IndexWriterConfig(matchVersion, indexAnalyzer));

    /* adding the document to the index */
    writer.addDocument(doc);

    /* defining a query that searches over all fields */
    BooleanQuery query1 = new BooleanQuery();
    query1.add(new TermQuery(new Term("title", "arms")), BooleanClause.Occur.SHOULD);
    query1.add(new TermQuery(new Term("description", "arms")), BooleanClause.Occur.SHOULD);
    query1.add(new TermQuery(new Term("subject", "arms")), BooleanClause.Occur.SHOULD);

    /* creating a new searcher */
    searcher = new IndexSearcher(IndexReader.open(writer, false));

    TopDocs results = searcher.search(query1, 10);

    /* the document matches because "arms" is among the expanded terms */
    Assert.assertEquals(1, results.totalHits);

    /* defining a query that searches for a broader concept */
    Query query2 = new TermQuery(new Term("subject", "military equipment"));

    results = searcher.search(query2, 10);

    /* ... also returns the document as result */
    Assert.assertEquals(1, results.totalHits);

}

From source file:at.ac.univie.mminf.luceneSKOS.queryparser.flexible.standard.SKOSStandardQueryParserTest.java

License:Apache License

@Test
public void queryParserSearch() throws IOException, QueryNodeException {

    Document doc = new Document();
    doc.add(new Field("content", "The quick brown fox jumps over the lazy dog", TextField.TYPE_STORED));

    writer.addDocument(doc);/*  ww  w  . j a  v a 2 s .  c  o m*/

    searcher = new IndexSearcher(DirectoryReader.open(writer, false));

    Query query = new SKOSStandardQueryParser(skosAnalyzer).parse("\"fox jumps\"", "content");

    Assert.assertEquals(1, TestUtil.hitCount(searcher, query));

    Assert.assertEquals("content:\"fox (jumps hops leaps)\"", query.toString());
    Assert.assertEquals("org.apache.lucene.search.MultiPhraseQuery", query.getClass().getName());

    query = new StandardQueryParser(new StandardAnalyzer(matchVersion)).parse("\"fox jumps\"", "content");
    Assert.assertEquals(1, TestUtil.hitCount(searcher, query));

    Assert.assertEquals("content:\"fox jumps\"", query.toString());
    Assert.assertEquals("org.apache.lucene.search.PhraseQuery", query.getClass().getName());

}

From source file:at.ac.univie.mminf.luceneSKOS.queryparser.flexible.standard.SKOSStandardQueryParserTest.java

License:Apache License

@Test
public void queryParserSearchWithBoosts() throws IOException, QueryNodeException {

    Document doc = new Document();
    doc.add(new Field("content", "The quick brown fox jumps over the lazy dog", TextField.TYPE_STORED));

    writer.addDocument(doc);//  ww  w.ja  v a2  s  .  com

    searcher = new IndexSearcher(DirectoryReader.open(writer, false));

    SKOSStandardQueryParser parser = new SKOSStandardQueryParser(skosAnalyzer);
    parser.setBoost(SKOSType.ALT, 0.5f);

    Query query = parser.parse("\"fox jumps\"", "content");

    Assert.assertEquals(1, TestUtil.hitCount(searcher, query));

    // boosts do not work in phrase queries
    Assert.assertEquals("content:\"fox (jumps hops leaps)\"", query.toString());
    Assert.assertEquals("org.apache.lucene.search.MultiPhraseQuery", query.getClass().getName());

    query = parser.parse("fox jumps", "content");

    Assert.assertEquals(1, TestUtil.hitCount(searcher, query));

    Assert.assertEquals("content:fox (content:jumps content:hops^0.5 content:leaps^0.5)", query.toString());
    Assert.assertEquals("org.apache.lucene.search.BooleanQuery", query.getClass().getName());

    query = new SKOSStandardQueryParser(new StandardAnalyzer(matchVersion)).parse("fox jumps", "content");
    Assert.assertEquals(1, TestUtil.hitCount(searcher, query));

    Assert.assertEquals("content:fox content:jumps", query.toString());
    Assert.assertEquals("org.apache.lucene.search.BooleanQuery", query.getClass().getName());

}

From source file:at.ac.univie.mminf.luceneSKOS.skos.impl.SKOSEngineImpl.java

License:Apache License

/**
 * This constructor loads the SKOS model from a given InputStream using the
 * given serialization language parameter, which must be either N3, RDF/XML,
 * or TURTLE./*from  w  ww. jav  a2s. com*/
 * 
 * @param inputStream
 *          the input stream
 * @param lang
 *          the serialization language
 * @throws IOException
 *           if the model cannot be loaded
 */
public SKOSEngineImpl(final Version version, InputStream inputStream, String lang) throws IOException {

    if (!("N3".equals(lang) || "RDF/XML".equals(lang) || "TURTLE".equals(lang))) {
        throw new IOException("Invalid RDF serialization format");
    }

    matchVersion = version;

    analyzer = new SimpleAnalyzer(matchVersion);

    skosModel = ModelFactory.createDefaultModel();

    skosModel.read(inputStream, null, lang);

    indexDir = new RAMDirectory();

    entailSKOSModel();

    indexSKOSModel();

    searcher = new IndexSearcher(IndexReader.open(indexDir));
}

From source file:at.ac.univie.mminf.luceneSKOS.skos.impl.SKOSEngineImpl.java

License:Apache License

/**
 * This constructor loads the SKOS model from a given filename or URI, starts
 * the indexing process and sets up the index searcher.
 * //w  w  w.j  a v a 2  s  . c  o m
 * @param languages
 *          the languages to be considered
 * @param filenameOrURI
 * @throws IOException
 */
public SKOSEngineImpl(final Version version, String filenameOrURI, String... languages) throws IOException {
    matchVersion = version;
    analyzer = new SimpleAnalyzer(matchVersion);

    String langSig = "";
    if (languages != null) {
        this.languages = new TreeSet<String>(Arrays.asList(languages));
        langSig = "-" + StringUtils.join(this.languages, ".");
    }

    String name = FilenameUtils.getName(filenameOrURI);
    File dir = new File("skosdata/" + name + langSig);
    indexDir = FSDirectory.open(dir);

    // TODO: Generate also if source file is modified
    if (!dir.isDirectory()) {
        // load the skos model from the given file
        FileManager fileManager = new FileManager();
        fileManager.addLocatorFile();
        fileManager.addLocatorURL();
        fileManager.addLocatorClassLoader(SKOSEngineImpl.class.getClassLoader());

        if (FilenameUtils.getExtension(filenameOrURI).equals("zip")) {
            fileManager.addLocatorZip(filenameOrURI);
            filenameOrURI = FilenameUtils.getBaseName(filenameOrURI);
        }

        skosModel = fileManager.loadModel(filenameOrURI);

        entailSKOSModel();

        indexSKOSModel();
    }

    searcher = new IndexSearcher(IndexReader.open(indexDir));
}