I looked at a couple of examples on how to get keyword analyzer to be case
insensitive but I think I missed something since it's not working for me.

In the code below, I'm indexing text in upper case and searching in lower
case.  But I get back no hits.  Do I need to something more while
indexing?

    private static class LowerCaseKeywordAnalyzer extends Analyzer
    {
        @Override
        protected TokenStreamComponents createComponents(String
theFieldName, Reader theReader)
        {
            KeywordTokenizer theTokenizer = new KeywordTokenizer(theReader);
            TokenStreamComponents theTokenStreamComponents =
                new TokenStreamComponents(
                        theTokenizer,
                        new LowerCaseFilter(Version.LUCENE_46,
theTokenizer));
            return theTokenStreamComponents;
        }
    }

    private static void addDocment(IndexWriter theWriter,
                                      String theFieldName,
                                      String theValue,
                                      boolean storeTokenized)
        throws Exception
    {
          Document theDocument = new Document();
          FieldType theFieldType = new FieldType();
          theFieldType.setStored(true);
          theFieldType.setIndexed(true);
          theFieldType.setTokenized(storeTokenized);
          theDocument.add(new Field(theFieldName, theValue, theFieldType));
          theWriter.addDocument(theDocument);
    }


    static void testLowerCaseKeywordAnalyzer()
        throws Exception
    {
        Version theVersion = Version.LUCENE_46;
        Directory theIndex = new RAMDirectory();

        Analyzer theAnalyzer = new LowerCaseKeywordAnalyzer();

        IndexWriterConfig theConfig = new IndexWriterConfig(theVersion,
                                                            theAnalyzer);
        IndexWriter theWriter = new IndexWriter(theIndex, theConfig);
        addDocment(theWriter, "sn", "SN345-B21", false);
        addDocment(theWriter, "sn", "SN445-B21", false);
        theWriter.close();

        QueryParser theParser = new QueryParser(theVersion, "sn",
theAnalyzer);
        Query theQuery = theParser.parse("sn:sn345-b21");
        IndexReader theIndexReader = DirectoryReader.open(theIndex);
        IndexSearcher theSearcher = new IndexSearcher(theIndexReader);
        TopScoreDocCollector theCollector = TopScoreDocCollector.create(10,
true);
        theSearcher.search(theQuery, theCollector);
        ScoreDoc[] theHits = theCollector.topDocs().scoreDocs;
        System.out.println("Number of results found: " + theHits.length);
    }

-- 
Regards
Milind

Reply via email to