Saurabh Kumar
Saurabh Kumar

Reputation: 16671

lucene search is working for only small letters

i am adding my lucene document like following

final Document document = new Document();
        document.add(new Field("login", user.getLogin(), Field.Store.YES, Field.Index.NO));
        document.add(new Field("email", user.getEmail(), Field.Store.YES, Field.Index.ANALYZED));
        document.add(new Field("firstName", user.getFirstName(), Field.Store.YES, Field.Index.ANALYZED));
        document.add(new Field("lastName", user.getLastName(), Field.Store.YES, Field.Index.ANALYZED));
        userIndexWriter.addDocument(document);

So if i search with small letters , the search is successful, but if i search with capital letters, the search returns nothing.

Anybody has a clue if i am missing something..?

analyzer = new StandardAnalyzer(Version.LUCENE_36);


                final IndexWriterConfig indexWriterConfig = new IndexWriterConfig(Version.LUCENE_36, analyzer);

                final IndexWriter indexWriter = new IndexWriter(directory, indexWriterConfig);

and my search manager

final SearcherManager searcherManager = new SearcherManager(indexWriter, true, null);

and i am searching like following

final BooleanQuery booleanQuery = new BooleanQuery();

            final Query query1 = new PrefixQuery(new Term("email", prefix));
            final Query query2 = new PrefixQuery(new Term("firstName", prefix));
            final Query query3 = new PrefixQuery(new Term("lastName", prefix));

            booleanQuery.add(query1, BooleanClause.Occur.SHOULD);
            booleanQuery.add(query2, BooleanClause.Occur.SHOULD);
            booleanQuery.add(query3, BooleanClause.Occur.SHOULD);

            final SortField sortField = new SortField("firstName", SortField.STRING, true);
            final Sort sort = new Sort(sortField);

            final TopDocs topDocs = searcherManager .search(booleanQuery, DEFAULT_TOP_N_SEARCH_USER, sort);

Upvotes: 0

Views: 255

Answers (1)

aalbahem
aalbahem

Reputation: 782

Make sure you apply the same analysis to both the document and query. For instance, if you set the indexing analyzer to be StandardAnalzyer, then you need also to apply it to your query like this:

QueryParser queryParser = new QueryParser(Version.LUCENE_CURRENT, "firstName", new StandardAnalyzer(Version.LUCENE_CURRENT));
    try {
        Query q = queryParser.parse("Ameer");
    } catch (ParseException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

Upvotes: 1

Related Questions