簡體   English   中英

Java,Lucene:不區分大小寫的搜索不適用於WildCard查詢

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

我正在基於Spring-MVC的應用程序中集成Lucene搜索和索引,目前正在使用通配符查詢搜索,但是它不區分大小寫。 有任何想法嗎?

鍵入“想法”時,我得到的是結果,但不是想法。

代碼:

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

謝謝。

我會嘗試將小寫的文本存儲到索引中。 並且,當用戶搜索文本時,請先使用小寫字母搜索查詢文本,然后再在索引中進行搜索。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM