WildcardQuery는 단일 문자와 일치하는 모든 문자 시퀀스에 대해 '*'와 같은 와일드 카드를 사용하여 문서를 검색하는 데 사용됩니다.
클래스 선언
다음은에 대한 선언입니다. org.apache.lucene.search.WildcardQuery 클래스-
public class WildcardQuery
extends MultiTermQuery
필드
클래스 생성자
S. 아니. |
생성자 및 설명 |
1 |
WildcardQuery(Term term) |
수업 방법
S. 아니. |
방법 및 설명 |
1 |
boolean equals(Object obj) |
2 |
protected FilteredTermEnum getEnum(IndexReader reader) 사용할 열거 형을 구성하여 패턴 용어를 확장합니다. |
삼 |
Term getTerm() 패턴 용어를 반환합니다. |
4 |
int hashCode() |
5 |
String toString(String field) 이 쿼리의 사용자가 읽을 수있는 버전을 인쇄합니다. |
상속 된 메서드
이 클래스는 다음 클래스에서 메서드를 상속합니다-
- org.apache.lucene.search.MultiTermQuery
- org.apache.lucene.search.Query
- java.lang.Object
용법
private void searchUsingWildCardQuery(String searchQuery)
throws IOException, ParseException {
searcher = new Searcher(indexDir);
long startTime = System.currentTimeMillis();
//create a term to search file name
Term term = new Term(LuceneConstants.FILE_NAME, searchQuery);
//create the term query object
Query query = new WildcardQuery(term);
//do the search
TopDocs hits = searcher.search(query);
long endTime = System.currentTimeMillis();
System.out.println(hits.totalHits +
" documents found. Time :" + (endTime - startTime) + "ms");
for(ScoreDoc scoreDoc : hits.scoreDocs) {
Document doc = searcher.getDocument(scoreDoc);
System.out.println("File: "+ doc.get(LuceneConstants.FILE_PATH));
}
searcher.close();
}
예제 애플리케이션
WildcardQuery를 사용하여 검색을 테스트하기위한 테스트 Lucene 애플리케이션을 만들어 보겠습니다.
단계 |
기술 |
1 |
Lucene-First Application 장에 설명 된대로 com.tutorialspoint.lucene 패키지 아래에 이름이 LuceneFirstApplication 인 프로젝트를 작성하십시오 . 또한 Lucene-First Application 장 에서 만든 프로젝트 를이 장에서 검색 프로세스를 이해하는 데 사용할 수 있습니다 . |
2 |
Lucene- 첫 번째 애플리케이션 장에 설명 된대로 LuceneConstants.java 및 Searcher.java 를 작성하십시오 . 나머지 파일은 변경하지 마십시오. |
삼 |
아래 언급 된대로 LuceneTester.java 를 작성하십시오 . |
4 |
응용 프로그램을 정리하고 빌드하여 비즈니스 논리가 요구 사항에 따라 작동하는지 확인합니다. |
LuceneConstants.java
이 클래스는 샘플 애플리케이션에서 사용할 다양한 상수를 제공하는 데 사용됩니다.
package com.tutorialspoint.lucene;
public class LuceneConstants {
public static final String CONTENTS = "contents";
public static final String FILE_NAME = "filename";
public static final String FILE_PATH = "filepath";
public static final int MAX_SEARCH = 10;
}
Searcher.java
이 클래스는 원시 데이터에서 만들어진 인덱스를 읽고 lucene 라이브러리를 사용하여 데이터를 검색하는 데 사용됩니다.
package com.tutorialspoint.lucene;
import java.io.File;
import java.io.IOException;
import org.apache.lucene.analysis.standard.StandardAnalyzer;
import org.apache.lucene.document.Document;
import org.apache.lucene.index.CorruptIndexException;
import org.apache.lucene.queryParser.ParseException;
import org.apache.lucene.queryParser.QueryParser;
import org.apache.lucene.search.IndexSearcher;
import org.apache.lucene.search.Query;
import org.apache.lucene.search.ScoreDoc;
import org.apache.lucene.search.TopDocs;
import org.apache.lucene.store.Directory;
import org.apache.lucene.store.FSDirectory;
import org.apache.lucene.util.Version;
public class Searcher {
IndexSearcher indexSearcher;
QueryParser queryParser;
Query query;
public Searcher(String indexDirectoryPath) throws IOException {
Directory indexDirectory = FSDirectory.open(new File(indexDirectoryPath));
indexSearcher = new IndexSearcher(indexDirectory);
queryParser = new QueryParser(Version.LUCENE_36, LuceneConstants.CONTENTS,
new StandardAnalyzer(Version.LUCENE_36));
}
public TopDocs search( String searchQuery) throws IOException, ParseException {
query = queryParser.parse(searchQuery);
return indexSearcher.search(query, LuceneConstants.MAX_SEARCH);
}
public TopDocs search(Query query) throws IOException, ParseException {
return indexSearcher.search(query, LuceneConstants.MAX_SEARCH);
}
public Document getDocument(ScoreDoc scoreDoc)
throws CorruptIndexException, IOException {
return indexSearcher.doc(scoreDoc.doc);
}
public void close() throws IOException {
indexSearcher.close();
}
}
LuceneTester.java
이 클래스는 lucene 라이브러리의 검색 기능을 테스트하는 데 사용됩니다.
package com.tutorialspoint.lucene;
import java.io.IOException;
import org.apache.lucene.document.Document;
import org.apache.lucene.index.Term;
import org.apache.lucene.queryParser.ParseException;
import org.apache.lucene.search.WildcardQuery;
import org.apache.lucene.search.Query;
import org.apache.lucene.search.ScoreDoc;
import org.apache.lucene.search.TopDocs;
public class LuceneTester {
String indexDir = "E:\\Lucene\\Index";
String dataDir = "E:\\Lucene\\Data";
Searcher searcher;
public static void main(String[] args) {
LuceneTester tester;
try {
tester = new LuceneTester();
tester.searchUsingWildCardQuery("record1*");
} catch (IOException e) {
e.printStackTrace();
} catch (ParseException e) {
e.printStackTrace();
}
}
private void searchUsingWildCardQuery(String searchQuery)
throws IOException, ParseException {
searcher = new Searcher(indexDir);
long startTime = System.currentTimeMillis();
//create a term to search file name
Term term = new Term(LuceneConstants.FILE_NAME, searchQuery);
//create the term query object
Query query = new WildcardQuery(term);
//do the search
TopDocs hits = searcher.search(query);
long endTime = System.currentTimeMillis();
System.out.println(hits.totalHits +
" documents found. Time :" + (endTime - startTime) + "ms");
for(ScoreDoc scoreDoc : hits.scoreDocs) {
Document doc = searcher.getDocument(scoreDoc);
System.out.println("File: "+ doc.get(LuceneConstants.FILE_PATH));
}
searcher.close();
}
}
데이터 및 색인 디렉토리 생성
나는 단순히 이름과 학생의 기타 세부 사항을 포함하는 record1.txt에서 record10.txt로 이름 지정된 10 개의 텍스트 파일을 사용하여 디렉토리에 넣었습니다. E:\Lucene\Data. 테스트 데이터. 인덱스 디렉토리 경로는 다음과 같이 생성되어야합니다.E:\Lucene\Index. Lucene-Indexing Process 장에서 인덱싱 프로그램을 실행 한 후 해당 폴더에 생성 된 인덱스 파일 목록을 볼 수 있습니다.
프로그램 실행
소스 생성, 원시 데이터, 데이터 디렉터리, 인덱스 디렉터리 및 인덱스 생성이 완료되면 프로그램을 컴파일하고 실행하는이 단계를 수행 할 준비가 된 것입니다. 이렇게하려면 KeepLuceneTester.Java 파일 탭이 활성화되고 Eclipse IDE에서 사용 가능한 실행 옵션을 사용하거나 Ctrl + F11 컴파일하고 실행하려면 LuceneTester신청. 응용 프로그램에 문제가 없으면 Eclipse IDE의 콘솔에 다음 메시지가 인쇄됩니다.
2 documents found. Time :47ms
File: E:\Lucene\Data\record1.txt
File: E:\Lucene\Data\record10.txt