Xapian的查询分析器
英文地址:http://xapian.org/docs/queryparser.html
Xapian::QueryParser的语法
本文档介绍了Xapian::QueryParser类支持的查询语法.这套语法设计得跟其他基于Web的搜索引擎的语法类似,这样用户就会很熟悉,不用从头学习一个全新的语法。
操作符
AND
Expression AND expression 匹配两个条件都符合的文档.
OR
Expression AND expression 匹配符合两个条件中任何一个的文档.
NOT
expression NOT expression 匹配那些只匹配第一个条件的文档.这个也可以写成expression AND NOT expression.如果您设置了FLAG_PURE_NOT,那么
NOT expression 就匹配了所有不符合这个表达式的文档
XOR
expression XOR expression 匹配那些符合两个条件中的一个的文档;但是不能两个都符合.XOR可能有点不好理解。
带括号的表达式
你可以括号来调整布尔运算符的优先级.在one OR two AND three这个查询中,AND优先,这跟one OR (two AND three)是一样的.你可以用(one OR two) AND three来改变优先级 。
+和 -
一组带+和-符号的term,会匹配所有带+的term,但是不匹配带-的term。而不带有+或-的term则影响搜索结果中文档的排名.你也可以给短语和括号表达式加上+或-符号
NEAR
one NEAR two NEAR three匹配那些各个term间的距离在10以内的文档.你也可以通过NEAR/n这种方法把默认的10这个值设置为其他的值,如one NEAR/6 two.
ADJ
ADJ像NEAR ,但只匹配的文字以相同的顺序出现的文档。因此, one ADJ two ADJ three匹配那些包含了这几个term词并且term间的距离在10以内的文档.您也可以通过ADJ/n语法来修改这个默认的阈值,例如:one ADJ/6 two.
短语搜索
用一对由双引号包起来的短语来搜索时,结果是精确匹配 这个短语的文档.带连字符的语语也作为短语处理,像邮箱和文件名称等 (比如. /etc/passwd 或是 president@whitehouse.gov).
搜索相关的域
如果数据库索引时已经为一些域设置了前缀,你可以设置一个域-前缀的Map,这样用户可以搜定搜索某些特定字段。例如author:dickens title:shop就可以搜索作者是狄更斯,名字包含”shop”的书。您也可以为双引号括起来一个短语指定前缀,例如(author:”charles dickens” ),或是为括号内的表达式指定前缀:(例如title:(mice men) )。
搜索固有名词
如何你搜一个首字母大写的词,它搜索时将不做词干原.
区间搜索
The QueryParser can be configured to support range-searching using document values.
这种范围搜索的语法是start .. end -例如, 01/03/2007..04/04/2007 , $10..100 , 5..10kg 。
同义词
QueryParser可以配置来支持同义词,它可以明确指定(使用语法~ term )或隐式(为所有term使用同义司,或是某些特别指出的一组term)。
通配符
QueryParser支持在结尾使用一个’*\'通配符的操作,wildc*将匹配wildcard, wildcarded, wildcards, wildcat, wildcats, etc等.此功能默认禁用. 在调用Xapian::QueryParser::parse_query( query_string , flags )函数时通过传递Xapian::QueryParser::FLAG_WILDCARD给flags参数就可以启用它.使用QueryParser::set_database( database )来告诉QueryParser用哪个数据库来扩展通配符.
query 片断的匹配
查询分析器(Query Parser)支持搜索只输入了片断的查询.计划实现的是这样一种”增量搜索”的系统,这种系统里,不等用户输完查询条件就可以显示一些查询结果.例如,在一个系统中,用户每输入一个字符,系统就输出新的搜索结果(也可能是另一种情况,如用户每停顿一小会就输出新的搜索结果,或其他情况).这种搜索有一个毛病就是,通过搜查询条件的一个片断,得到的结果跟实际想要的可能完全没有语义上的联系.比如,想搜dynamic cat,可能返回的是dynamic categorisation的结果.这种情况下每输入一个字符搜索结果 都会快速地变化.如果将输入部分的视为包含一个隐含的尾部通配符,它会匹配所有以已输入字符结开头的词,这样我们可以得到更平滑变动的搜索结果―-每当新字符键入时,搜索结果都会更接近我们想要的主题. 一个简单有效的办法就是开启通配符选荐,并在查询字符串的尾部加上”*”字符串. 不过这会跟那些以标点结束或其他一些字符结束的的搜索搅不清.此功能默认情况下是禁用.
Xapian::QueryParser::parse_query( query_string , flags )函数时通过传递Xapian::QueryParser::FLAG_PARTIAL给flags参数就可以启用它.使用QueryParser::set_database( database )来告诉QueryParser用哪个数据库来扩展通配符.
建议继续学习:
扫一扫订阅我的微信号:IT技术博客大学习
- 作者:一米六二 来源: 互联网,请记住我
- 标签: Xapian 查询分析器
- 发布时间:2010-06-11 11:40:16
- [46] 界面设计速成
- [42] Oracle MTS模式下 进程地址与会话信
- [41] 视觉调整-设计师 vs. 逻辑
- [40] IOS安全–浅谈关于IOS加固的几种方法
- [39] android 开发入门
- [38] 图书馆的世界纪录
- [38] 如何拿下简短的域名
- [37] 程序员技术练级攻略
- [37] 【社会化设计】自我(self)部分――欢迎区
- [34] 读书笔记-壹百度:百度十年千倍的29条法则