2017-05-29 64 views
0

我正在開發基於Spring-MVC的應用程序中集成的Lucene搜索和索引,目前我正在使用通配符查詢搜索,但它不適用於個案 - 敏感的方式。有任何想法嗎?Java,Lucene:不區分大小寫的搜索不適用於WildCard查詢

當我輸入Ideas時,我得到了結果,但不是想法。

代碼:

@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)); 
       } 
      } 

} 

//搜索代碼

@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(); 
} 

謝謝。

回答

2

我會嘗試將文本以小寫形式存儲到索引中。 並且當用戶搜索文本時,在搜索索引之前,使用小寫字母搜索查詢文本。

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

+0

也一樣。謝謝。 –