当前位置: 首页 > 文档资料 > Lucene 中文文档 >

WildCardQuery

优质
小牛编辑
138浏览
2023-12-01

WildcardQuery用于使用通配符(如'*')搜索任何字符序列,匹配单个字符。

类声明

以下是org.apache.lucene.search.WildcardQuery类的声明 -

public class WildcardQuery 
   extends MultiTermQuery 

字段 (Fields)

  • 受保护的术语

类构造函数

S.No.构造函数和描述
1

WildcardQuery(Term term)

Class Methods

S.No.方法和描述
1

boolean equals(Object obj)

2

protected FilteredTermEnum getEnum(IndexReader reader)

构造要使用的枚举,扩展模式术语。

3

Term getTerm()

返回模式术语。

4

int hashCode()

5

String toString(String field)

打印此查询的用户可读版本。

方法继承 (Methods Inherited)

该类继承以下类中的方法 -

  • org.apache.lucene.search.MultiTermQuery
  • org.apache.lucene.search.Query
  • java.lang.Object

用法 (Usage)

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(); 
} 

例子 Example Application

让我们创建一个测试Lucene应用程序来使用WildcardQuery测试搜索。

描述
1

Lucene - First Application章节中解释,在cn.xnip.lucene包下创建一个名为LuceneFirstApplication的项目。 您还可以使用Lucene - First Application创建的项目Lucene - First Application本章的Lucene - First Application章节来理解搜索过程。

2

按照Lucene - First Application章节中的说明创建LuceneConstants.javaSearcher.java 。 保持其余文件不变。

3

创建LuceneTester.java ,如下所述。

4

清理并构建应用程序以确保业务逻辑按照要求运行。

LuceneConstants.java

此类用于提供跨示例应用程序使用的各种常量。

package cn.xnip.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 cn.xnip.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 cn.xnip.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命名的10个文本文件到record10.txt,其中只包含学生的姓名和其他详细信息,并将它们放在目录E:\Lucene\Data 。 测试数据。 索引目录路径应创建为E:\Lucene\Index 。 在Lucene - Indexing Process一章中运行索引程序后,您可以看到在该文件夹中创建的索引文件列表。

运行程序 (Running the Program)

完成创建源,创建原始数据,数据目录,索引目录和索引之后,就可以为编译和运行程序的步骤做好准备。 为此,请保持LuceneTester.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