Я думаю, что то, что вы точно хотите, невозможно, но вот другой подход, который имеет аналогичный эффект:
Откройте Indexreader, получите все термины, следующие после «http» (упорядочено по лексикографическому порядку 1 ) до тех пор, пока они не начнутся с "http://" или" https://":
final IndexReader reader = IndexReader.open(IndexHelper.DIRECTORY, true);
final TermEnum termEnum = reader.terms(new Term("text", "http"));
final List<Term> terms = new ArrayList<Term>();
Term foundTerm = termEnum.term();
// if the first term does not match url pattern: advance until it first matches
if (!(foundTerm.text().startsWith("https://") || foundTerm.text().startsWith("http://"))) {
while (termEnum.next()) {
foundTerm = termEnum.term();
if (foundTerm.text().startsWith("https://") || foundTerm.text().startsWith("http://")) {
break;
}
}
}
// collect all terms
while ((foundTerm.text().startsWith("https://") || foundTerm.text().startsWith("http://")) && termEnum.next()) {
foundTerm = termEnum.term();
terms.add(foundTerm);
}
Полученные URL-адреса затем будут в списке "терминов", как термины lucene..
Это, конечно, имеет тот недостаток, что вы не получаете документы, в которых были найдены эти URL, но вы можете запросить их потом снова с найденными терминами.
Способ, которым я лежалздесь это не очень гибко (но, возможно, быстрее для достижения цели), но вы, конечно, можете вернуться к шаблонам для достижения большей гибкости.Тогда вы замените все foundTerm.text().startsWith("https://") || foundTerm.text().startsWith("http://")
на yourPattern.matches(foundTerm.text())
.
И извините, что я так много написал ^^.
Надеюсь, это поможет.