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

Reply via email to