Lucene的体系结构—QueryParse.docVIP

  • 4
  • 0
  • 约5.2千字
  • 约 10页
  • 2018-06-28 发布于福建
  • 举报
Lucene的体系结构—QueryParse

QueryParser包分析 QueryParser包的描述 包结构图 UML图 图1.2-1 CharStream和FastCharStream 图1.2-2 QueryParser及其相关类 图1.2-3剩余的类 功能: QueryParser的作用就是解析查询语句,按顺序调用各种 Query类查找出结果。 QueryParser包含了解析查询语句的类。用户输入查询语句,查询语句被传到查询分析器中,分析器将将对查询语句进行分析,首先解析字符串的连接符,然后对每个词进行切词,转换为词元。最后得到Search可以处理的查询对象(Query)。Search根据这个查询对象遍历索引树,得到查询结果,并返回查询结果集(Hits)。 实现细节 具体介绍-QueryParser包中的类: QueryParser包中有如下类: CharStream:该接口类描述了一个保留字符的行列位置的字符流。它在一定程度上还具有备份此字符流的功能。该接口的实施用于JavaCC产生的TokenManager的实施。 FastCharStream:JavaCC的CharStream接口的有效实施。需要注意的是它不做行数计算,而是保持追踪输入中令牌的字符位置。需要Lucene的analysis.Token的API。 MultiFieldQueryParser(extends QueryParser):构造查询搜索多个域。当parse(String query)被调用,会构造这样一个查询(假设查询由两个查询词组成,并指定两个(title:term1 body:term1) (title:term2 body:term2),当setDefaultOperator(AND_OPERATOR)设置,其结果将是:+(title:term1 body:term1) +(title:term2 body:term2) ParseException(extends Exception):解析遇到错误时,抛出异常。可以修改这个类来定制自己的错误报告机制,只要保留了public fields。 QueryParser:这个类是JavaCC产生的。最重要的方法是{@link #parse(String)}。请注意,QueryParser不是线程安全的。当创建QueryParser时,你必须指定所需的版本。 QueryParserConstants:public interface,定义了token常量值和常数,产生自org.javacc.parser.OtherFilesGen#start() QueryParserTokenManager:Token管理 Token:描述输入的Token流。标记Token类型的整数。这个编号系统由JavaCCParser决定,这些数字的表存储在文件... Constants.java中。 TokenMgrError (extends Error):顺序列出为什么这种类型的错误被抛出的各种原因。 其中最核心的类是QueryParser,所以接下来我们重点研究这个类。 具体介绍-QueryParser类 1、QueryParser类的使用: 首先我们举一个代码示例: Query query = null; query = QueryParser.parse(keywords,fieldName,new StandardAnalyzer()); 从上面代码可以看出,当使用QueryParser构建用户查询语句的Query类时,不仅需要用户输入关键字文本,还需要告诉QueryParser默认将在哪个域中查找该关键字信息。如果用户在输入的关键字中没有给出检索字段信息时,QueryParser就将在默认域内进行检索。QueryParser调用一个StandardAnalyzer,一般来说,创建索引的分析器和查询的分析器最好保持一致QueryParser类中重要的函数public QueryParser:QueryParser类中最重要的一个函数,也即我们解析Lucene查询语法的时候调用的函数 public Query parse:使用throws将异常抛给ParseException处理 ToplevelQuery:QueryParser.jj中定义的语法分析器被JavaCC编译后会生成的函数 一个查询语句Q,是由多个clause组成的,每个clause有修饰符Modifier,或为+, 或为-,clause之间的有连接符,或为AND,或为OR,或为NOT。在Lucene的语法解析中NOT被算作Modifier,和-起相同作用。Query: 查询语句开头是一个Modifier后面便是子语句clause,可以生成子查询语句q如果第一个语句的Modifier

文档评论(0)

1亿VIP精品文档

相关文档