Lucene에서 정규 표현식을 사용하여 "Bug reports"를 찾고 싶습니다. 그러나 시도 할 때마다 제대로 작동하지 않습니다.Lucene을 사용하여 정규 표현식 일치를 찾으시겠습니까?
잘못된 설정을 피하기 위해 Lucene page의 코드를 사용했습니다.
여기 내 코드입니다 :
import java.util.regex.Pattern;
import org.apache.lucene.analysis.SimpleAnalyzer;
import org.apache.lucene.document.Document;
import org.apache.lucene.document.Field;
import org.apache.lucene.index.IndexWriter;
import org.apache.lucene.index.Term;
import org.apache.lucene.search.IndexSearcher;
import org.apache.lucene.search.regex.JakartaRegexpCapabilities;
import org.apache.lucene.search.regex.RegexCapabilities;
import org.apache.lucene.search.regex.RegexQuery;
import org.apache.lucene.store.RAMDirectory;
public class Rege {
private static IndexSearcher searcher;
private static final String FN = "field";
public static void main(String[] args) throws Exception {
RAMDirectory directory = new RAMDirectory();
try {
IndexWriter writer = new IndexWriter(directory,
new SimpleAnalyzer(), true,
IndexWriter.MaxFieldLength.LIMITED);
Document doc = new Document();
doc
.add(new Field(
FN,
"[Phpmyadmin-devel] Commits against bug 601721 (Cookie auth mode faulty with IIS)",
Field.Store.NO, Field.Index.ANALYZED));
writer.addDocument(doc);
writer.optimize();
writer.close();
searcher = new IndexSearcher(directory, true);
} catch (Exception e) {
e.printStackTrace();
}
System.err.println(regexQueryNrHits("bug [0-9]+",null));
}
private static Term newTerm(String value) {
return new Term(FN, value);
}
private static int regexQueryNrHits(String regex,
RegexCapabilities capability) throws Exception {
RegexQuery query = new RegexQuery(newTerm(regex));
if (capability != null)
query.setRegexImplementation(capability);
return searcher.search(query, null, 1000).totalHits;
}
}
내가 1
을 반환 bug [0-9]+
을 기대하지만, 그렇지 않습니다. 나는 자바로 정규 표현식을 테스트했는데 성공했다.
문제는 숫자와 관련이 없습니다. 문제는 정규 표현식 쿼리와 분석이 함께 작동하는 방법입니다. 정규 표현식은 전체 필드가 아닌 * 용어 *와 일치해야합니다. 그것이 왜 NOT_ANALYZED와 함께 작동하는지, 전체 필드를 단일 용어로 만들었습니다. 하나의 경고. 분석되지 않은 입력란을 만들면 먼저 검색 색인 (예 : 실적)을 사용하는 이점 대부분을 포기합니다. – femtoRgon