- 1、本文档共10页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
[Lucene的多域查询、结果中查询、查询结果分页、高亮查询结果和结果评分
/huhui_cs/article/details/9615973Lucene的多域查询、结果中查询、查询结果分页、高亮查询结果和结果评分1.针对多个域的一次性查询1.1.三种方案? 使用lucene构造搜索引擎的时候,如果要针对多个域进行一次性查询,一般来说有三种方法: 第一种实现方法是创建多值的全包含域的文本进行索引,这个方案最简单。但是这个防范有个缺点:你不能直接对每个域的加权进行控制。 第二种方法是使用MultiFieldQueryParser,它是QueryParser的子类,它会在后台程序中实例化一个QueryParser对象,用来针对每个域进行查询表达式的解析,然后使用BooleanQuery将查询结果合并起来。当程序向BooleanQuery添加查询子句时,默认操作符OR被用于最简单的解析方法中。为了实现更好的控制,布尔操作符可以使用BooleanClause的常量指定给每个域。如果需要指定的话可以使用BooleanClause.Occur.MUST,如果禁止指定可以使用BooleanClause.Occur.MUST_NOT,或者普通情况为BooleanClause.Occur.SHOULD。下面的程序展示的是如何创建MultiFieldQueryParser类的方法:[java]?view plaincopy//?在这四个域中检索?String[]?fields?=?{?phoneType,?name,?category,?price?};??Query?query?=?new?MultiFieldQueryParser(Version.LUCENE_36,?fields,?analyzer).parse(keyword);?? 第三种方法就是使用高级DisjunctionMaxQuery类,它会封装一个或者多个任意的查询,将匹配的文档进行OR操作。1.2.方案选择 以上三种方案中,并不是第三种方案最好,也不是第一种方案就最差。哪种实现方式更适合你的应用程序呢?答案是“看情况”,因为这里存在一些取舍。全包含域是一个简单的解决方案——但这个方案只能对搜索结果进行简单的排序并且可能浪费磁盘空间(程序可能对同样的文本索引两次),但这个方案可能会获得最好的搜索性能。?MultiFieldQueryParser生成的BooleanQuery会计算所有查询所匹配的文档评分的总和(DisjunctionMaxQuery则只选取最大评分),然后它能够实现针对每个域的加权。你必须对以上3中解决方案都进行测试,同时需要一起考虑搜索性能和搜索相关性,然后再找出最佳方案。2.在结果中查询2.1.两种方案 在检索结果中再次进行检索,是一个很常见的需求,一般有两种方案可以选择: ①使用QueryFilter把第一个查询当作一个过滤器处理; ②用BooleanQuery把前后两个查询结合起来,并且使用BooleanClause.Occur.MUST。 针对第一种方法,我需要解释一下。QueryFilter在Lucene的2.x版本中是存在的,但是在3.x中,lucene的API中这个类已经被废弃了,无法再找到。如果你的项目使用的是lucene是3.x,但是你又一定要使用QueryFilter,那么你必须自己创建一个QueryFilter类,然后将2.x中QueryFilter的源代码复制过来。你可能会说,直接在工程中同时使用lucene2.x和3.x的核心jar文件不就行了吗。但遗憾的是,一个工程下,是不能同时使用不同版本的lucene的。2.2.QueryFilter方案上文已经说了,如果一定要使用QueryFilter,由于lucene2.x中没有QueryFilter的API,所以自己要写一个QueryFilter,QueryFilter的源代码在lucene2.x中是这样的:[java]?view plaincopyimport?org.apache.lucene.search.CachingWrapperFilter;??import?org.apache.lucene.search.Query;??import?org.apache.lucene.search.QueryWrapperFilter;???public?class?QueryFilter?extends?CachingWrapperFilter?{????/**??*?Constructs?a?filter?which?only?matches?documents?matching??*?codequery/code.??*/??public?QueryFilter(Query?query)?{???super(new?QueryWrapperFilter(q
您可能关注的文档
- [K线图形.doc
- [第十三章:新功能主义.ppt
- [KMPlayer播放器高级设置.doc
- [K线的奥秘——大阳线.doc
- [第十三讲 图层设置.ppt
- [第十三章齿轮传动.ppt
- [k线知识.doc
- [L-苹果酸的生理功能研究.doc
- [第十三讲学术论文写作训练201106.ppt
- [L152卫生统计学Ⅱ.doc
- 绿色供应链管理在木材制造业的应用与推广案例研究报告.docx
- 2025年工业互联网平台数字水印技术在工业互联网安全防护中的安全教育与培训体系报告.docx
- 2025年美妆护肤电商供应链智能化改造可行性分析.docx
- 城市污水处理厂智能化升级改造对城市排水系统的影响报告.docx
- 2025年融资租赁行业资产质量评估与市场拓展前景分析.docx
- 2025年政策支持下的医疗器械国产化产业政策风险防控与产业发展策略报告.docx
- 2025年康复医疗服务体系与康复康复康复机构运营品牌战略实施报告.docx
- 基于2025年基因检测技术的遗传性疾病诊断准确性研究热点报告.docx
- 基于区块链技术的储能技术商业模式创新与市场应用.docx
- 2025年通用设备制造行业细分领域工业物联网应用案例研究报告.docx
文档评论(0)