当前位置:首页 > lucene学习
询对象都会被转化为小写字母形式,解除这一默认值,调用QueryParser.setLowercaseExtendedTerms(false)。要在项开端包含通配符,需要调用setAllowLeadingWildcard方法,同时牺牲一部分性能。
3.3.4 布尔查询
AND OR NOT 必须大写。如果查询项之间没有指定布尔操作符,则默认为OR。程序可改变对隐含操作符的设置。
parser.setDefaultOperator(QueryParser.AND_OPERATOR); NOT操作单独使用将不起作用。
3.3.5 短语查询
查询语句中用双引号扩起来的项可以用来创建一个PhraseQuery。引号之间的文本将被进行分析,作为分析结果,PhraseQuery可能不会跟原始短语一样精确。双引号内的文本会促使分析器将之转换为PhraseQuery,停用词被问号代替,默认Slop因子为0,但可以调用QueryParser.setPhraseSlop()方法来改变这个默认因子,也可以用波浪号(~)和预期的整型slop值来修改。单项短语(single-term phrase)将被优化成TermQuery对象。
3.3.6 模糊查询
波浪符(~)会针对正在处理的项来创建模糊查询。需要注意的是,波浪符还可以用于指定松散短语查询,但具体环境是各不相同的。双引号表示短语查询,它并不能用于模糊査询。你可以选择性指定一个浮点数,用来表示所需的最小相似程度。下面是使用案例:
public void testFuzzyQuery() throws Exception {
QueryParser parser = new QueryParser{Version.LUCENE_30, \;
Query query = parser.parse(\
System.out.printIn(\query = parser.parse(\System.out.printIn(\)
该程序会产生如下输出:. fuzzy: subject:kountry~0.5 fuzzy 2: subject:kcountry~0.7
同样的性能可以揭示:使用通配符查询(WildcardQuery)和使用模糊査询是一致 的,它们还可以通过自定义方式禁止运行,具体可以参考[1]6.3.2小节。
3.3.7 MatchAIIDocsQuery
当输人*:*后,QueryParser 会生成 MatchAIIDocsQuery。
这个操作会将QueryParser所产生的所有Lucene核心査询类型进行包装。但这并 不是QueryParser的一切:它还支持一些非常实用的Query子句分组语法、加权子句以及将子句限制在特定的域上。
3.3.8 分组查询、域选择与加权
使用小括号建立子查询。创建查询时,默认的域名是创建QueryParser时提供的。使用 field:key可将搜索范围限定在某一个具体域,也可以使用field(a b c)的形式将三个项的查询以逻辑OR的形式连接起来。
在浮点数前面附上一个^符号可以对查询处理进行加权因子的设置。举例来说,查询表达式junit^2.0 testing会将junit TermQuery的加权系数设置为2.0,并维持 testing TermQuery的默认加权系数1.0。你可以对任何类型的查询进行加权,这其中包括插入的组。
ANTLR和JFlex项目可提供高于QueryParser能力的语法和功能。
4. 分析器与分析过程
对于Lucene核心来说,分析操作会出现在两个时间点:建立索引期间和使用QueryParser对象进行搜索时。在搜索结果中高亮显示被搜索内容时,也可能要用到分析操作。
几个内置分析器的解析示例如下:
4.1内置分析器说明
? WhitespaceAnalyzer:顾名思义,该分析器通过空格来分割文本信息,而并不
对生成的语汇单元进行其他的规范化处理.
? SimpIeAnalyzer:该分析器会首先通过非字母字符来分割文本信息,然后将语
汇单元统一为小写形式。需要注意的是,该分析器会去掉数字类型的字符, 但会保留其他字符。
? StopAnalyzer:该分析器功能与SimpIeAnalyzer类似.区别在于,前者会去除常
用单词.在默认情况下,它会去除英文中的常用单词(如the、a等),但你也可以根据需要自己设置常用单词.
? StandardAnalyzer:这是Lucene最复杂的核心分析器。基于JFlex-based语法
操作。它包含大量的逻辑操作来识别某些种类的语汇单元,比如公司名称、E-mail地址以及主机名称等. 它还会将语汇单元转换成小写形式,并去除停用词和标点符号.
详见[1] 第4.3节
在真正应用中,一般创建自己的分析器链。这需要自己扩展TokenFilter和Analyzer,一个例子见[1]4.4同音词,4.5同义词处理,4.6词干分析
4.2 分析过程简述
更多描述见[1]第四章
创建IndexWriter后,即为文档选择了默认的分析器。若某个文档需要使用特殊的分析器时,addDocument方法和updateDocument方法都可以选择对应的分析器。为了确保文本信息被分析器处理,可以在创建域时指定Field.Index.ANALYZED
共分享92篇相关文档