In my web application, I need search functionality on first name and last name in 2 different ways, one search must be based on 'Metaphone Analyzer' giving all similar sounding names as result and another search should be exact match on either first name or last name. The name sounds like search has already been coded previously and I need to add another exact match search to the application. For this, I have a Lucene Index based out on fields from database tables which already had the names field indexed with metaphone analyzer. I added 2 more fields in the existing document, which indexes first name/last name as UN_TOKENIZED. While searching for exact match, I create a term query to look in to newly created UN_TOKENIZED fields as shown in the code snippets......however this is not getting any hits. I would like to know is there anything wrong conceptually?
//creating fields for the document FIRST_NAME(Field.Store.NO, Field.Index.TOKENIZED), FIRST_NAME_EXACT(Field.Store.NO, Field.Index.UN_TOKENIZED), LAST_NAME(Field.Store.NO, Field.Index.TOKENIZED), LAST_NAME_EXACT(Field.Store.NO, Field.Index.UN_TOKENIZED), //name sounds like analyzer class....used while Indexing and searching public class NameSoundsLikeAnalyzer extends Analyzer { PerFieldAnalyzerWrapper wrapper; /** * */ public NameSoundsLikeAnalyzer() { wrapper = new PerFieldAnalyzerWrapper(new StopAnalyzer()); wrapper.addAnalyzer( PhysicianDocumentBuilder.PhysicianFieldInfo.FIRST_NAME .toString(), new MetaphoneReplacementAnalyzer()); wrapper.addAnalyzer( PhysicianDocumentBuilder.PhysicianFieldInfo.LAST_NAME .toString(), new MetaphoneReplacementAnalyzer()); } /** * @see PerFieldAnalyzerWrapper#tokenStream(String, Reader) */ @Override public TokenStream tokenStream(String fieldName, Reader reader) { return wrapper.tokenStream(fieldName, reader); } } //lastly the query builder if(physicianQuery.getExactNameSearch()){ if(StringUtils.isNotEmpty(physicianQuery.getFirstNameStartsWith())){ TermQuery term = new TermQuery(new Term(FIRST_NAME_EXACT.toString(), physicianQuery.getFirstNameStartsWith())); query.add(term,MUST); } if(StringUtils.isNotEmpty(physicianQuery.getLastNameStartsWith())){ TermQuery term = new TermQuery(new Term(LAST_NAME_EXACT.toString(), physicianQuery.getLastNameStartsWith())); query.add(term,MUST); } else{ //we want metaphone search if (StringUtils.isNotEmpty(physicianQuery.getFirstNameStartsWith())) { query.add(buildMultiTermPrefixQuery(FIRST_NAME.toString(), physicianQuery.getFirstNameStartsWith()), MUST); } if (StringUtils.isNotEmpty(physicianQuery.getLastNameStartsWith())) { query.add(buildMultiTermPrefixQuery(LAST_NAME.toString(), physicianQuery.getLastNameStartsWith()), MUST); } } -- View this message in context: http://www.nabble.com/No-hits-while-searching%21-tp23735920p23735920.html Sent from the Lucene - Java Users mailing list archive at Nabble.com. --------------------------------------------------------------------- To unsubscribe, e-mail: java-user-unsubscr...@lucene.apache.org For additional commands, e-mail: java-user-h...@lucene.apache.org