【问题标题】:Java, Lucene : Case insensitive search not working with WildCard queryJava,Lucene:不区分大小写的搜索不适用于通配符查询
【发布时间】:2017-05-29 16:45:41
【问题描述】:

我正在我们基于 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();
}

谢谢。

【问题讨论】:

    标签: java lucene


    【解决方案1】:

    我会尝试将小写文本存储到索引中。 并且当用户搜索文本时,将搜索查询文本设为小写,然后在索引中进行搜索。

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

    【讨论】:

    • 也这样做了。谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-22
    • 2019-03-15
    • 1970-01-01
    相关资源
    最近更新 更多