package lia.analysis.keyword;
/**
* Copyright Manning Publications Co.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific lan
*/
import junit.framework.TestCase;
import lia.common.TestUtil;
import org.apache.lucene.index.IndexWriter;
import org.apache.lucene.index.Term;
import org.apache.lucene.analysis.SimpleAnalyzer;
import org.apache.lucene.analysis.KeywordAnalyzer;
import org.apache.lucene.analysis.PerFieldAnalyzerWrapper;
import org.apache.lucene.document.Document;
import org.apache.lucene.document.Field;
import org.apache.lucene.search.IndexSearcher;
import org.apache.lucene.search.Query;
import org.apache.lucene.search.TermQuery;
import org.apache.lucene.store.Directory;
import org.apache.lucene.store.RAMDirectory;
import org.apache.lucene.queryParser.QueryParser;
import org.apache.lucene.util.Version;
// From chapter 4
public class KeywordAnalyzerTest extends TestCase {
private IndexSearcher searcher;
public void setUp() throws Exception {
Directory directory = new RAMDirectory();
IndexWriter writer = new IndexWriter(directory,
new SimpleAnalyzer(),
IndexWriter.MaxFieldLength.UNLIMITED);
Document doc = new Document();
doc.add(new Field("partnum",
"Q36",
Field.Store.NO,
Field.Index.NOT_ANALYZED_NO_NORMS)); //A
doc.add(new Field("description",
"Illidium Space Modulator",
Field.Store.YES,
Field.Index.ANALYZED));
writer.addDocument(doc);
writer.close();
searcher = new IndexSearcher(directory);
}
public void testTermQuery() throws Exception {
Query query = new TermQuery(new Term("partnum", "Q36")); //B
assertEquals(1, TestUtil.hitCount(searcher, query)); //C
}
public void testBasicQueryParser() throws Exception {
Query query = new QueryParser(Version.LUCENE_30, //1
"description", //1
new SimpleAnalyzer()) //1
.parse("partnum:Q36 AND SPACE"); //1
assertEquals("note Q36 -> q",
"+partnum:q +space", query.toString("description")); //2
assertEquals("doc not found :(", 0, TestUtil.hitCount(searcher, query));
}
/*
#A Don't analyze field
#B Don't analyze term
#C Verify document matches
#1 QueryParser analyzes each term and phrase
#2 toString() method
*/
public void testPerFieldAnalyzer() throws Exception {
PerFieldAnalyzerWrapper analyzer = new PerFieldAnalyzerWrapper(
new SimpleAnalyzer());
analyzer.addAnalyzer("partnum", new KeywordAnalyzer());
Query query = new QueryParser(Version.LUCENE_30,
"description", analyzer).parse(
"partnum:Q36 AND SPACE");
assertEquals("Q36 kept as-is",
"+partnum:Q36 +space", query.toString("description"));
assertEquals("doc found!", 1, TestUtil.hitCount(searcher, query));
}
}