Lucene 的四大索引查询 ——bool 域搜索 通配符 范围搜索
Lucene 的四大索引查询
清单1:使用布尔操作符
- //Test boolean operator
- blic void testOperator(String indexDirectory) throws Exception{
- Directory dir = FSDirectory.getDirectory(indexDirectory,false);
- IndexSearcher indexSearcher = new IndexSearcher(dir);
- String[] searchWords = {"Java AND Lucene", "Java NOT Lucene", "Java OR Lucene",
- "+Java +Lucene", "+Java -Lucene"};
- Analyzer language = new StandardAnalyzer();
- Query query;
- for(int i = 0; i < searchWords.length; i++){
- query = QueryParser.parse(searchWords[i], "title", language);
- Hits results = indexSearcher.search(query);
- System.out.println(results.length() + "search results for query " + searchWords[i]);
- }
域搜索(Field Search)
Lucene 支持域搜索,你可以指定一次查询是在哪些域(Field)上进行。例如,如果索引的文档包含两个域,Title 和 Content,你就可以使用查询 “Title: Lucene AND Content: Java” 来返回所有在 Title 域上包含 Lucene 并且在 Content 域上包含 Java 的文档。清单 2 显示了如何利用 Lucene 的 API 来实现域搜索。
清单2:实现域搜索
- //Test field search
- public void testFieldSearch(String indexDirectory) throws Exception{
- Directory dir = FSDirectory.getDirectory(indexDirectory,false);
- IndexSearcher indexSearcher = new IndexSearcher(dir);
- String searchWords = "title:Lucene AND content:Java";
- Analyzer language = new StandardAnalyzer();
- Query query = QueryParser.parse(searchWords, "title", language);
- Hits results = indexSearcher.search(query);
- System.out.println(results.length() + "search results for query " + searchWords);
- }
通配符搜索(Wildcard Search)
Lucene 支持两种通配符:问号(?)和星号(*)。你可以使用问号(?)来进行单字符的通配符查询,或者利用星号(*)进行多字符的通配符查询。例如,如果你想搜索 tiny 或者 tony,你就可以使用查询语句 “t?ny”;如果你想查询 Teach, Teacher 和 Teaching,你就可以使用查询语句 “Teach*”。清单3 显示了通配符查询的过程。
清单3:进行通配符查询
- //Test wildcard search
- public void testWildcardSearch(String indexDirectory)throws Exception{
- Directory dir = FSDirectory.getDirectory(indexDirectory,false);
- IndexSearcher indexSearcher = new IndexSearcher(dir);
- String[] searchWords = {"tex*", "tex?", "?ex*"};
- Query query;
- for(int i = 0; i < searchWords.length; i++){
- query = new WildcardQuery(new Term("title",searchWords[i]));
- Hits results = indexSearcher.search(query);
- System.out.println(results.length() + "search results for query " + searchWords[i]);
- }
- }
模糊查询
Lucene 提供的模糊查询基于编辑距离算法(Edit distance algorithm)。你可以在搜索词的尾部加上字符 ~ 来进行模糊查询。例如,查询语句 “think~” 返回所有包含和 think 类似的关键词的文档。清单 4 显示了如果利用 Lucene 的 API 进行模糊查询的代码。
清单4:实现模糊查询
- //Test fuzzy search
- public void testFuzzySearch(String indexDirectory)throws Exception{
- Directory dir = FSDirectory.getDirectory(indexDirectory,false);
- IndexSearcher indexSearcher = new IndexSearcher(dir);
- String[] searchWords = {"text", "funny"};
- Query query;
- for(int i = 0; i < searchWords.length; i++){
- query = new FuzzyQuery(new Term("title",searchWords[i]));
- Hits results = indexSearcher.search(query);
- System.out.println(results.length() + "search results for query " + searchWords[i]);
- }
- }
范围搜索(Range Search)
范围搜索匹配某个域上的值在一定范围的文档。例如,查询 “age:[18 TO 35]” 返回所有 age 域上的值在 18 到 35 之间的文档。清单5显示了利用 Lucene 的 API 进行返回搜索的过程。
清单5:测试范围搜索
- //Test range search
- public void testRangeSearch(String indexDirectory)throws Exception{
- Directory dir = FSDirectory.getDirectory(indexDirectory,false);
- IndexSearcher indexSearcher = new IndexSearcher(dir);
- Term begin = new Term("birthDay","20000101");
- Term end = new Term("birthDay","20060606");
- Query query = new RangeQuery(begin,end,true);
- Hits results = indexSearcher.search(query);
- System.out.println(results.length() + "search results is returned");
- }
转载于:https://www.cnblogs.com/bonelee/p/6601943.html
Lucene 的四大索引查询 ——bool 域搜索 通配符 范围搜索相关推荐
- Lucene教程--维护索引、查询对象和相关度排序
1 索引维护 1.1 添加索引 步骤: 1)创建存放索引的目录Directory 2)创建索引器配置管理类IndexWriterConfig 3)使用索引目录和配置管理类创建索引器 4)使用索引器将D ...
- java搜索引擎创建索引_搜索引擎系列 ---lucene简介 创建索引和搜索初步
一.什么是Lucene? Lucene最初是由Doug Cutting开发的,2000年3月,发布第一个版本,是一个全文检索引擎的架构,提供了完整的查询引擎和索引引擎 :Lucene得名于Doug妻子 ...
- lucene的建立索引,搜索,中文分词
Lucene是apache软件基金会4 jakarta项目组的一个子项目,是一个开放源代码的全文检索引擎工具包. 现在最新的lucene已经更新到6.0版本了.但是这个最新版,需要适配jdk1.80以 ...
- 联合两个索引查询,已解决: 还有个进行多条件搜索 and 与 or 的操作
1 联合两个索引查询,已解决: IndexSearcher[] searchers = new IndexSearcher[2]; searchers[0] = new IndexSearcher(m ...
- java之全文索引搜索lucene之增删改查文档与中文分词搜索
java之全文索引搜索lucene之增删改查文档与中文分词搜索 接上文,接下来介绍一个lucene的各种query,然后介绍一下中文全文索引搜索. 对于各种query,我就直接上代码了,具体的话,我已 ...
- Lucene全文检索_索引创建
因项目原因接触到了solr,感觉全文检索满神奇的,计算机的搜索文件功能应该都用过,非常慢.lucene建立一个索引库,而索引检索是非常快的. 假设文件系统,某个目录下有n个文件,每个文件有不同 ...
- apache lucene_Apache Lucene中的并发查询执行
apache lucene Apache Lucene是一个出色的并发纯Java搜索引擎,如果您愿意,它可以轻松地使服务器上的可用CPU或IO资源饱和. "典型" Lucene应用 ...
- Apache Lucene中的并发查询执行
Apache Lucene是一个出色的并发纯Java搜索引擎,如果您愿意,它可以轻松地使服务器上的可用CPU或IO资源饱和. "典型" Lucene应用程序的并发模型在搜索时每个查 ...
- Lucene.Net:关于索引的一些补充说明和总结
在前面的几篇关于lucene的文章中,我已经简要说明了如何利用lucene进行分词.索引和搜索.最近大部分时间耗在查资料上,看得比较多比较杂但是一贯的不够深入,还好多数都是不会影响编程实践的概念性的东 ...
最新文章
- 项目/程序的流程走向
- ConfigParser-- 读取写入配置文件
- python web为什么不火-Python这么火,为何有人说Python不好找工作?
- 原来SMPlayer可以直接播放音乐CD碟
- JQuery 获取节点
- crt中 新建的连接存储在哪_连接昌邑路和浦东大道,这条新建道路的规划设计方案公示中...
- C语言数据结构(大话数据结构——笔记2)第四章:栈与队列
- 删除一个目录及其子目录下的所有.svn文件
- Git版本管理工具的使用
- 分布式架构的session问题
- vep文件如何转换mp4_如何将DVD的vob视频格式转换成mp4格式
- 计算机领域专业术语中英文对照(时常更新)
- 讲真,你知道Python咋来的吗?
- Android 系统(16)---应用启动过程
- 大数据_Hbase-(数据读取流程_hbase读取效率比较慢的原因)---Hbase工作笔记0008
- 【转载】Eclipse快捷键 10个最有用的快捷键
- 数组排列组合算法汇总
- Win10:ssh报错:RSA host key for 192.168.3.10 has changed and you have requested strict checking.
- 一步步完成FastDFS + Spring MVC上传下载整合示例
- java 绘制动态波形图6,折线图波形图绘制(动态绘制,实时变化)
热门文章
- C++实现Linux下弹出U盘的方法
- python读取文件模式_python如何读取文件的数据
- 软件自动升级ftp服务器,国人自己的专业FTP服务器软件(上)
- 计算机网络09年考研题,计算机网络考研真题及答案
- mysql providername_c#访问各数据库的providerName各驱动-阿里云开发者社区
- 字节跳动最新开源!java界面实现查询功能
- 【深度学习】基于Pytorch的softmax回归问题辨析和应用(一)
- 解决Python memory error的问题--扩充虚拟内存
- 机器学习(MACHINE LEARNING) 【周志华版-”西瓜书“-笔记】 DAY6-支持向量机
- 设计模板类,使得在创建一个对象时可以动态确定它的基类(public)