Lucene-WildcardQuery

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.javaSearcher.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

Language