Lucene提供的条件判断查询[转]

Lucene提供的条件判断查询[转]

第一、    按词条搜索 - TermQuery
query = new TermQuery(new Term("name","word1"));
hits = searcher.search(query);
这样就可以把 field 为 name 的所有包含 word1 的文档检索出来了。
第二、 “与或”搜索 - BooleanQuery
它实际是一个组合 query 看看下面的代码:
query1 = new TermQuery(new Term("name","word1"));
query2 = new TermQuery(new Term("name","word2"));
                   BooleanQuery query=new BooleanQuery();
           query.add(query1, BooleanClause.Occur.MUST);  
                   query.add(query2, BooleanClause.Occur.MUST);

hits = searcher.search(query);
                   其中的MUST、SHOULD、MUST_NOT表示与、或、非,从字面意思很容易理解
Lucene 可以最多支持连续 1024 的 query 的组合。
第三、 在某一范围内搜索 - RangeQuery
IndexSearcher searcher = new IndexSearcher("F:\资源\lucene研究\test");
     Term beginTime = new Term("time","200001");
     Term endTime = new Term("time","200005");
     Hits hits = null;
     RangeQuery query = null;
     query = new RangeQuery(beginTime, endTime, false);
     hits = searcher.search(query);
RangeQuery 的构造函数的参数分别代表起始、结束、是否包括边界。这样我们就可以按照要求检索了。
第四、 使用前缀检索 - PrefixQuery
这个检索的机制有点类似于 indexOf() 从前缀查找。这个常在英文中使用,中文中就很少使用了。代码如下:
IndexSearcher searcher = new IndexSearcher("F:\资源\lucene研究\test");
       Term pre1 = new Term("name", "Da");
       query = new PrefixQuery(pre1);
       hits = searcher.search(query);
第五、 多关键字的搜索 - PhraseQuery
可以多个关键字同时查询。使用如下:
query = new PhraseQuery();
       query.add(word1);
       query.add(word2);
       query.setSlop(0);
       hits = searcher.search(query);
       printResult(hits, "'david' 与 'mary' 紧紧相隔的 Document");
       query.setSlop(2);
       hits = searcher.search(query);
       printResult(hits, "'david' 与 'mary' 中相隔两个词的短语 ");
    这里我们要注意 query.setSlop(); 这个方法的含义。
query.setSlop(0); 紧紧相连 (这个的条件比较苛刻)
query.setSlop(2); 相隔
第六、 使用短语缀搜索 - PharsePrefixQuery
使用 PharsePrefixQuery 可以很容易的实现相关短语的检索功能。
实例:
query = new PhrasePrefixQuery();
       // 加入可能的所有不确定的词
Term word1 = new Term("content", "david");
       Term word2 = new Term("content", "mary");
       Term word3 = new Term("content", "smith");
       Term word4 = new Term("content", "robert");
       query.add(new Term[]{word1, word2});
       // 加入确定的词
       query.add(word4);
       query.setSlop(2);
       hits = searcher.search(query);
       printResult(hits, " 存在短语 'david robert' 或 'mary robert' 的文档 ");
第七、 相近词语的搜索 - fuzzyQuery
可以通俗的说它是一种模糊查询。
实例:
Term word1 = new Term("content", "david");
       Hits hits = null;
       FuzzyQuery query = null;
       query = new FuzzyQuery(word1);
       hits = searcher.search(query);
       printResult(hits," 与 'david' 相似的词 ");
第八、 使用通配符搜索 - WildcardQuery
实例:
IndexSearcher searcher = new IndexSearcher("F:\资源\lucene
研究\test");


       Term word1 = new Term("content", "*ever");


       Term word2 = new Term("content", "wh?ever");


       Term word3 = new Term("content", "h??ever");


       Term word4 = new Term("content", "ever*");


       WildcardQuery query = null;


       Hits hits = null;


       query = new WildcardQuery(word1);


       hits = searcher.search(query);


       printResult(hits, "*ever");


       query = new WildcardQuery(word2);


       hits = searcher.search(query);


       printResult(hits, "wh?ever");    

       query = new WildcardQuery(word3);


       hits = searcher.search(query);


       printResult(hits, "h??ever");    

       query = new WildcardQuery(word4);


       hits = searcher.search(query);


       printResult(hits, "ever*");


    由上可以看出通配符?代便 1 个字符, * 代表 0 到多个字符。
Lucene 现在支持以上八中的搜索方式,我们可以根据需要选择适合自己的搜索方式。当然上面提供的一些可能对英文还是比较有效,中文就不可取了,所以我们开始想想百度,我们只在一个输入框中搜索结果。有了这个疑问我们揭开下一章的讨论吧!
查询字符串的解析:这个就是我们经常在一个输入框中输入我们要检索的文字,交给搜索引擎去帮我们分词。
QueryParser 类就是对查询字符串的解析类。
看看它的用法:
query = QueryParser.parse(key1, "name", new StandardAnalyzer());
hits = searcher.search(query);
它直接返回一个 Query 对象。需要传入的参数分别是:
用户需要查询的字符串、需要检索的对应字段名称、采用的分词类。
Analyzer analyzer = new CJKAnalyzer();
String[] fields = {"filename", "content"};
Query query = MultiFieldQueryParser.parse(searchword, fields, analyzer);
Hits hits = searcher.search(query);
QueryParser 的“与” 和 “或”:
QueryParser 之间默认是或,我们想改变为与的话加入以下代码:
QueryParser.setOperator(QueryParser.DEFAULT_OPERATOR_AND);
就可以了。

posted on 2011-07-21 11:10 放逐忧伤 阅读(...) 评论(...) 编辑 收藏

转载于:https://www.cnblogs.com/navy235/archive/2011/07/21/2112561.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/495418.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

安卓逆向_14 --- 单机和弱联网游戏内购 突破口 和 思路

From:https://www.bilibili.com/video/BV1UE411A7rW?p41 Android 逆向资源收集( apk ):https://blog.csdn.net/qq_36869808/article/details/79290420 Android逆向-Android基础逆向7(内购干货集合)&#…

OpenAI最新研究:如何通过无监督学习提升「自然语言理解能力」?

来源:amazonaws.com摘要:长期以来,使用无监督(预)训练来提高区别性任务的性能表现一直是机器学习研究的一个重要目标。最近,OpenAI通过使用一个具有可扩展性的任务不可知系统,在一系列不同的自然…

安卓逆向_15( 一 ) --- JNI 和 NDK

From:较详细的介绍JNI:https://blog.csdn.net/lizhifa2011/article/details/21021177 From:https://www.jb51.net/article/126111.htm NDK 官方文档:https://developer.android.google.cn/training/articles/perf-jni JNI / NDK …

Nature:科学家成功绘制出大脑神经细胞“地图”

图片来源:Thomas Hainmller, Marlene Bartos来源:生物谷摘要:最近,一项刊登在国际杂志Nature上的研究报告中,来自弗莱堡大学的科学家们通过研究开发出了一种新型模型来解释大脑如何储存一些“有形事件”(ta…

互联网的大脑模型与原子的太阳系模型,科学史上的巨系统对比

作者:刘锋 计算机博士,互联网进化论作者科学探索中,有两种重要的促进力量,第一种是认同,会帮助研究者增强对探索方向的信心和勇气,第二种是批判,会帮助研究者获知探索路上的障碍和陷阱。10年前…

安卓逆向_15( 二 ) --- Android Studio 3.6.3 JNI 环境配置 和 so 生成开发 demo

From:Android Studio 3.0 JNI 的实现:https://blog.csdn.net/ziyoutiankoong/article/details/79696279 Android Studio 生成so包和.H文件给jni调用产生新so包。(即so包调so包):https://blog.csdn.net/sxh_android/article/details/80694291…

SQL经典语句(转载)

一、基础<?XML:NAMESPACE PREFIX O ?> 1、说明&#xff1a;创建数据库CREATE DATABASE database-name 2、说明&#xff1a;删除数据库drop database dbname3、说明&#xff1a;备份sql server--- 创建 备份数据的 deviceUSE masterEXEC sp_addumpdevice disk, testBac…

卡内基梅隆大学机器学习系副主任邢波:AI落地现在最缺的是思维方式

来源&#xff1a;亿欧摘要&#xff1a;邢波认为&#xff1a;人工智能现在最缺的不是算法和知识&#xff0c;而是落地应用的思维方式&#xff1b;数据如何被处理、系统如何被调试、资源如何配置&#xff0c;目前阶段还处于黑箱&#xff0c;很混沌的状态&#xff1b;人工智能未来…

安卓逆向_15( 三 ) --- Android NDK 开发【 jni 静态注册、JNI_OnLoad 动态注册】

Android Studio开发JNI示例&#xff1a;https://blog.csdn.net/wzhseu/article/details/79683045 JNI_动态注册_静态注册.zip : https://pan.baidu.com/s/1wpTYA9euSdPqE1Z2bA_BHA 提取码: 7h97 错误: 编码GBK的不可映射字符 ( https://blog.csdn.net/talenter111/article/de…

scrapy-redis 使 redis 不止保存 url(例如:json)

scrapy-redis 使 redis 不止保存 url&#xff1a;https://my.oschina.net/u/4382439/blog/3712637 Scrapy-redis 和 Scrapyd 用法详解&#xff1a;https://zhuanlan.zhihu.com/p/44564597 Scrapy-redis GitHub 地址&#xff1a;https://github.com/rmax/scrapy-redis scrapy…

学界 | DeepMind等机构提出「图网络」:面向关系推理

来源&#xff1a;机器之心摘要&#xff1a;近日&#xff0c;由 DeepMind、谷歌大脑、MIT 和爱丁堡大学等公司和机构的 27 位科学家共同提交的论文《Relational inductive biases, deep learning, and graph networks》引起了人们的关注。深度学习虽然精于分类&#xff0c;但一直…

oracle 11g 下载地址

oracle 11g 下载地址&#xff1a;http://download.oracle.com/otn/nt/oracle11g/win32_11gR1_database.zip不需要注册&#xff0c;直接复制到迅雷或其他下载软件中即可下载。转载于:https://www.cnblogs.com/snake-hand/archive/2011/07/25/2452273.html

ARM 汇编基础教程番外篇 ——配置实验环境

From&#xff1a;https://zhuanlan.zhihu.com/p/29145513 win10 arm 汇编环境 Windows 平台下搭建 ARM 汇编集成环境&#xff1a;https://jingyan.baidu.com/article/4b52d70288bfcdfc5c774ba5.html 要调试 ARM 程序&#xff0c;我们需要&#xff1a; 能运行 ARM 程序的运行环…

asp.net网站编码测试

1.常规asp.net网站 a.使用GBK编码时 1)form提交方式 ie&#xff1a;地址栏显示GBK编码后的字符串&#xff0c;输出中文 fireforx&#xff1a;地址栏显示GBK编码后的字符串&#xff0c;输出中文 chrome&#xff1a;地址栏显示GBK编码后的字符串&#xff0c;输…

asp.net调试方法

1、先将网站设为启动项目。 2、选择“启动选项”。 3、进行设置&#xff1a; 然后调试&#xff0c;在浏览器输入网址&#xff0c;此时如果遇到“断点”程序将自动停止运行&#xff0c;即可进行调试&#xff0c;查看运行中的变量的值。 转载于:https://www.cnblogs.com/gwjtssy/…

基因对智力的预测能力不到7%,别迷信它

图片来源&#xff1a;The Conversation撰文 Carl Zimmer翻译 李杨审校 贾晓璇编辑 魏潇2016 年我在写一本关于遗传的书时&#xff0c;曾对自己的基因组进行了测序。一些科学家还好心地指出了我基因组图谱的一些有趣特征&#xff0c;教我如何自己读取数据。从那以后&#xff0c;…

ARM 汇编语言入门

[翻译]二进制漏洞利用&#xff08;二&#xff09;ARM32位汇编下的TCP Bind shell&#xff1a;https://bbs.pediy.com/thread-253511.htm ARM汇编语言入门 From&#xff1a;ARM汇编语言入门&#xff08;一&#xff09;&#xff1a;https://zhuanlan.zhihu.com/p/109057983 原文…

hdu 1250 Hat's Fibonacci

哈&#xff0c;原来大数用整型数组模拟更快&#xff0c;更容易用呀 一个位可以保存大数中的四个位甚至更多&#xff0c;而且效率极高&#xff0c;看完这方面的资料&#xff0c;真是后知后觉啊&#xff0c;自己写了一下代码&#xff0c;确实好写很多 #include<stdio.h> #i…

图灵奖演讲2018,59页PPT迎接芯片体系结构的新黄金时代

来源&#xff1a; 计算所控制计算实验室6月4日&#xff0c;在今年的国际计算机体系结构大会ISCA2018的图灵奖演讲会上&#xff0c;ACM/IEEE邀请了2017年图灵奖获得者John Hennessy与David Patterson联合进行了一场关于未来计算机体系结构发展道路探索的精彩演讲。二位图灵奖得主…

ARM 指令集 和 Thumb 指令集

From&#xff1a;https://gitee.com/lsliushuang/ASM/blob/master/arm汇编.txt ARM 汇编指令集汇总&#xff1a;https://blog.csdn.net/qq_40531974/article/details/83897559 ARM 指令集详解(超详细&#xff01;带实例!&#xff09;&#xff1a;https://blog.csdn.net/micke…