它是否可以在lucence中进行2个字符的搜索

时间:2014-08-02 10:01:32

标签: java algorithm lucene full-text-search search-engine

您好我有关于lucence搜索的问题 是否可以使用lucence搜索从文件中搜索2个字符

对于前。如果有像" karthik test"这样的名字是否可以搜索" ka"或者" te"在lucence。如果这样请提供代码..

2 个答案:

答案 0 :(得分:0)

是的,可以使用wildcards

将您的QueryParserte*一起投放,它会生成一个查询,该查询以带有任何后缀的te前缀开始。

答案 1 :(得分:0)

也许这对你有帮助


    private List search(String word, IndexSearcher searcher, Date fromDate, Date toDate, int skip, int noOfRecords) throws Exception {
        StandardAnalyzer analyzer = new StandardAnalyzer();
        BooleanQuery.Builder finalQuery = new BooleanQuery.Builder();
        List results = null;
        
        for(String key : keyUtil.getAllKeys()) {
            if((!key.contains("Date") || !key.contains("Time"))) {
                QueryParser queryParser = new QueryParser(key, analyzer);
                
                Query query = queryParser.parse(word);
                finalQuery.add(query, Occur.SHOULD);
            }
        }
        
        if(fromDate != null && toDate != null) {
            Query query = NumericDocValuesField.newSlowRangeQuery("StartDate", fromDate.getTime(), toDate.getTime());
            finalQuery.add(query, Occur.MUST);
        }
        
        TopDocs hits = searcher.search(finalQuery.build(), skip + noOfRecords);
        results = new ArrayList();
        if(hits.totalHits.value > 0) {
            int count = 0;
            for (ScoreDoc sd : hits.scoreDocs) {
                if(count >= skip) {
                    Document d = searcher.doc(sd.doc);
                    results.add(d.get("storePath"));
                }
                count ++;
            }
        }
        
        analyzer.close();
        return results;
    }

您始终可以使用带有属性“word”的 RegEx 模式。喜欢

 * someWord *