你好,我有一个关于lucence搜索的问题,是否可以使用lucence搜索从文件中搜索2个字符例如,如果有像“karthik测试”这样的名称,是否可以在lucence中搜索“ka”或“te”。如果是这样,请提供一个代码块。
6qqygrtg1#
是的,可以使用通配符。向QueryParser输入te*,它将生成一个以te前缀开头并带有任何后缀的查询。
te*
te
yfwxisqw2#
也许这对你有帮助
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; }
您可以始终将RegEx模式与属性“word”一起使用。
* someWord *
2条答案
按热度按时间6qqygrtg1#
是的,可以使用通配符。
向QueryParser输入
te*
,它将生成一个以te
前缀开头并带有任何后缀的查询。yfwxisqw2#
也许这对你有帮助
您可以始终将RegEx模式与属性“word”一起使用。