对于搜索引擎(比如Google和百度)来讲,很多情况下只需要用户在输入框内输入所需查询的内容,然后再单击“搜索”就可以了,其余的事情全部交给搜索引擎去处理,最后搜索引擎会把检索到的结果显示出来。那么搜索引擎是怎样处理用户输入得符号串的呢?
在Lucene中,这项工作就交给了QueryParser类来完成,它的作用就是把各种用户输入的符号串转为一个内部的Query或者一个Query组。虽然Lucene提供的API允许使用者创建各种各样的Query(查询语句),但它同时也允许通过QueryParser(查询分析器)生成各种各样的Query子对象。这使得Lucene的查询功能更加灵活和强大。
QueryParser的简单用法
对于QueryParser
QueryParser
(String f, Analyzer a)
Query parse(String query)
Parses a query string, returning a Query.
eg:
QueryParser parser = new QueryParser("name", analyzer);
Query query1 = parser.parse("中国建设银行");
而对于MultiFieldQueryParser
static Query parse(String[] queries, String[] fields,
Analyzer analyzer)
Parses a query which searches on the fields specified. static Query parse(String[] queries, String[] fields,
BooleanClause.Occur[] flags, Analyzer analyzer)
Parses a query, searching on the fields specified.
static Query parse(String query, String[] fields,
BooleanClause.Occur[] flags, Analyzer analyzer)
Parses a query, searching on the fields specified.
eg:
// 构造布尔查询(可根据你的要求随意组合)
BooleanClause.Occur[] flags = new BooleanClause.Occur[] {
BooleanClause.Occur.MUST, BooleanClause.Occur.MUST};
Query query = MultiFieldQueryParser.parse("北京 奥运会", new String[] {
"name", "title"}, flags, new StandardAnalyzer());
注意:
在使用QueryParser对用户的输入进行扫描时,还需要给它一个分析器。不过,当对用户输入的关键字进行分析时的分析器应当与建立索引时的分析器一样,这样才能保证分析成功。