I have a field with the value C0001.DevNm001.  If I search for

    C0001.DevNm001 --> Get Hit
    DevNm00*       --> Get Hit
    C0001.DevNm00*  --> Get No Hit

The field gets tokenized on the period since it's surrounded by a letter
and and a number.  The query gets evaluated as a prefix query.  I'd have
thought that this should have found the document.  Any clues on why this
doesn't work?

The full code is below.

        Directory theDirectory = new RAMDirectory();
        Version theVersion = Version.LUCENE_47;
        Analyzer theAnalyzer = new StandardAnalyzer(theVersion);
        IndexWriterConfig theConfig =
                            new IndexWriterConfig(theVersion, theAnalyzer);
        IndexWriter theWriter = new IndexWriter(theDirectory, theConfig);

        String theFieldName = "Name";
        String theFieldValue = "C0001.DevNm001";
          Document theDocument = new Document();
          theDocument.add(new TextField(theFieldName, theFieldValue,
Field.Store.YES));
          theWriter.addDocument(theDocument);
        theWriter.close();

        String theQueryStr = theFieldName + ":C0001.DevNm00*";
        Query theQuery =
            new QueryParser(theVersion, theFieldName,
theAnalyzer).parse(theQueryStr);
        System.out.println(theQuery.getClass() + ", " + theQuery);
        IndexReader theIndexReader = DirectoryReader.open(theDirectory);
        IndexSearcher theSearcher = new IndexSearcher(theIndexReader);
        TopScoreDocCollector collector = TopScoreDocCollector.create(10,
true);
        theSearcher.search(theQuery, collector);
        ScoreDoc[] theHits = collector.topDocs().scoreDocs;
        System.out.println("Hits found: " + theHits.length);

Output:

class org.apache.lucene.search.PrefixQuery, Name:c0001.devnm00*
Hits found: 0


-- 
Regards
Milind

Reply via email to