We are Borg
We are Borg

Reputation: 5313

Java, Lucene : Case insensitive search not working with WildCard query

I am working on a integrating Lucene search and indexing in our Spring-MVC based application and currently I am using Wild-card query search, but it's not working in a case-insensitive manner. Any ideas?

When I type Ideas, I get the results, but not for ideas.

Code :

@Override
    public synchronized void saveIndexes(String text, String tagFileName, String filePath, long groupId, boolean type, int objectId) {
        try {
        Directory directory = org.apache.lucene.store.FSDirectory.open(path);
            IndexWriterConfig config = new IndexWriterConfig(new SimpleAnalyzer());
            IndexWriter indexWriter = new IndexWriter(directory, config);
 org.apache.lucene.document.Document doc = new org.apache.lucene.document.Document();
            if (filePath != null) {
                File file = new File(filePath); // current directory
                doc.add(new TextField("path", file.getPath(), Field.Store.YES));
            }
            doc.add(new StringField("id", String.valueOf(objectId), Field.Store.YES));
            //  doc.add(new TextField("id",String.valueOf(objectId),Field.Store.YES));
            if (text == null) {
                if (filePath != null) {
                    FileInputStream is = new FileInputStream(filePath);
                    BufferedReader reader = new BufferedReader(new InputStreamReader(is));
                    StringBuilder stringBuffer = new StringBuilder();
                    String line;
                    while ((line = reader.readLine()) != null) {
                        stringBuffer.append(line).append("\n");
                    }
                    stringBuffer.append("\n").append(tagFileName);
                    if(groupNotes!=null){
                        stringBuffer.append(String.valueOf(groupNotes.getNoteNumber()));
                    }
                    reader.close();
                    doc.add(new TextField("contents", stringBuffer.toString(), Field.Store.YES));
                }
            } 

}

// Search code

 @Override
    public List<Integer> searchLucene(String text, long groupId, boolean type) {
 Directory directory = FSDirectory.open(path);
                        IndexReader indexReader = DirectoryReader.open(directory);
                        IndexSearcher indexSearcher = new IndexSearcher(indexReader);
                        Query query = new WildcardQuery(new Term("contents","*"+text + "*"));
                        TopDocs topDocs = indexSearcher.search(query, 50);
                        for (ScoreDoc scoreDoc : topDocs.scoreDocs) {
                            org.apache.lucene.document.Document document = indexSearcher.doc(scoreDoc.doc);
                            objectIds.add(Integer.valueOf(document.get("id")));
                            System.out.println("Text is "+document.get("contents"));
                        }
                        indexSearcher.getIndexReader().close();
                        directory.close();
}

Thank you.

Upvotes: 0

Views: 2113

Answers (1)

Yan Khonski
Yan Khonski

Reputation: 13083

I would try to store text in lowercase into the index. And when the user searches the text, make the search query text in lowercase, before searching it in the index.

https://stackoverflow.com/a/30926385/4587961

Upvotes: 3

Related Questions