I am using SnowballAnalyzer with Hibernate search. I am using it to search
phrases in a database. It only seems to return the stemmed version of any
query. So for example, I have two phrases in the DB:
"Cheney is a nut"
and
"I hate nuts"
When I do a search for either "nut" or "nuts" it only returns "Cheney is a
nut"
This is what seems to be inside my index file:
'cheney' 'hate' 'i' 'nut' 's'
Here is the code, although it's hibernate so not sure if it's relevant or
will mean anything to anyone here.
Thanks,
Kshanti
import javax.persistence.EntityManager;
import org.apache.lucene.analysis.snowball.SnowballAnalyzer;
import org.apache.lucene.analysis.standard.StandardAnalyzer;
import org.apache.lucene.queryParser.QueryParser;
import org.hibernate.*;
public class LuceneSearch
{
public enum Similarity
{
KEYWORDS,
HIGH,
EXPAND,
EXACT,
}
public static final String TEXT_FIELD = "TEXT";
private static final String HIBERNATE_FILE = "META-INF/persistence.xml";
private QueryParser _parser;
private String[] _stopWords;
private FullTextSession _textSession;
private EntityManager _entityManager;
private Similarity _defaultSimilarity=Similarity.KEYWORDS;
private boolean _beenIndexed=false;
public static boolean UseStemmer=true;
public LuceneSearch(EntityManager entityMgr)
{
if (null == entityMgr)
throw new IllegalArgumentException("entityMgr must not be null.");
_entityManager = entityMgr;
// Have to use sessions here
try
{
Session session = (Session) _entityManager.getDelegate();
_textSession = Search.createFullTextSession(session);
initialize(null);
}
catch (ClassCastException ce)
{
// this error supposedly should not get thrown as getDelegate()
// supposedly always returns a Session, but just in case.
// (this was from examples on the web and the #hibernate channel so
// needs to be verified
ce.printStackTrace();
// TODO: Wrap it up and do something else with it
throw ce;
}
}
private void initialize(String[] stopWords)
{
if (stopWords != null)
{
// first set up the parser with the new stop words
if(UseStemmer)
{
_parser = new QueryParser(TEXT_FIELD, new
SnowballAnalyzer("English",stopWords));
}
else
{
_parser = new QueryParser(TEXT_FIELD, new
StandardAnalyzer(stopWords));
}
}
else
{ // default stop words
if(UseStemmer)
{
_parser = new QueryParser(TEXT_FIELD, new
SnowballAnalyzer("English"));
}
else
{
_parser = new QueryParser(TEXT_FIELD, new StandardAnalyzer());
}
}
_stopWords = stopWords;
}
/***
* Run the indexer
*/
public void index()
{
//now index
Transaction tx = _textSession.beginTransaction();
List<Prediction> predictions = _textSession.createQuery("from
Prediction as prediction").list();
for(Prediction pred: predictions)
{
_textSession.index(pred);
}
tx.commit(); //index are written at commit time
_beenIndexed=true;
}
public List<Prediction> searchPredictions(String queryStr)
{
// look in text column of predictions
try
{
if (queryStr != null && !queryStr.equals(""))
{
// need to add the field name to the querystring
queryStr = TEXT_FIELD + ":" + queryStr;
org.apache.lucene.search.Query luceneQuery =
_parser.parse(queryStr);
Query query = _textSession.createFullTextQuery(luceneQuery,
Prediction.class);
List<Prediction> ret = query.list();
//default fits the KEYWORDS similarity
if (ret != null)
{
switch(_defaultSimilarity)
{
case KEYWORDS:
case HIGH:
case EXPAND:
case EXACT:
return ret;
}
}
}
}
catch (Exception pe)
{// KKG TODO: Turn this into a better exception
pe.printStackTrace();
}
return new ArrayList<Prediction>();
}
}
--
View this message in context:
http://www.nabble.com/Help-with-Snowball-Analyzer-tf4497960.html#a12827864
Sent from the Lucene - Java Users mailing list archive at Nabble.com.
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]