Lucene 的四大索引查询  
清单1:使用布尔操作符

Java代码     
  1. //Test boolean operator
  2. blic void testOperator(String indexDirectory) throws Exception{
  3. Directory dir = FSDirectory.getDirectory(indexDirectory,false);
  4. IndexSearcher indexSearcher = new IndexSearcher(dir);
  5. String[] searchWords = {"Java AND Lucene", "Java NOT Lucene", "Java OR Lucene",
  6. "+Java +Lucene", "+Java -Lucene"};
  7. Analyzer language = new StandardAnalyzer();
  8. Query query;
  9. for(int i = 0; i < searchWords.length; i++){
  10. query = QueryParser.parse(searchWords[i], "title", language);
  11. Hits results = indexSearcher.search(query);
  12. System.out.println(results.length() + "search results for query " + searchWords[i]);
  13. }

域搜索(Field Search)

Lucene 支持域搜索,你可以指定一次查询是在哪些域(Field)上进行。例如,如果索引的文档包含两个域,Title 和 Content,你就可以使用查询 “Title: Lucene AND Content: Java” 来返回所有在 Title 域上包含 Lucene 并且在 Content 域上包含 Java 的文档。清单 2 显示了如何利用 Lucene 的 API 来实现域搜索。

清单2:实现域搜索

Java代码     
  1. //Test field search
  2. public void testFieldSearch(String indexDirectory) throws Exception{
  3. Directory dir = FSDirectory.getDirectory(indexDirectory,false);
  4. IndexSearcher indexSearcher = new IndexSearcher(dir);
  5. String searchWords = "title:Lucene AND content:Java";
  6. Analyzer language = new StandardAnalyzer();
  7. Query query = QueryParser.parse(searchWords, "title", language);
  8. Hits results = indexSearcher.search(query);
  9. System.out.println(results.length() + "search results for query " + searchWords);
  10. }

通配符搜索(Wildcard Search)

Lucene 支持两种通配符:问号(?)和星号(*)。你可以使用问号(?)来进行单字符的通配符查询,或者利用星号(*)进行多字符的通配符查询。例如,如果你想搜索 tiny 或者 tony,你就可以使用查询语句 “t?ny”;如果你想查询 Teach, Teacher 和 Teaching,你就可以使用查询语句 “Teach*”。清单3 显示了通配符查询的过程。

清单3:进行通配符查询

Java代码     
  1. //Test wildcard search
  2. public void testWildcardSearch(String indexDirectory)throws Exception{
  3. Directory dir = FSDirectory.getDirectory(indexDirectory,false);
  4. IndexSearcher indexSearcher = new IndexSearcher(dir);
  5. String[] searchWords = {"tex*", "tex?", "?ex*"};
  6. Query query;
  7. for(int i = 0; i < searchWords.length; i++){
  8. query = new WildcardQuery(new Term("title",searchWords[i]));
  9. Hits results = indexSearcher.search(query);
  10. System.out.println(results.length() + "search results for query " + searchWords[i]);
  11. }
  12. }

模糊查询

Lucene 提供的模糊查询基于编辑距离算法(Edit distance algorithm)。你可以在搜索词的尾部加上字符 ~ 来进行模糊查询。例如,查询语句 “think~” 返回所有包含和 think 类似的关键词的文档。清单 4 显示了如果利用 Lucene 的 API 进行模糊查询的代码。

清单4:实现模糊查询

Java代码     
  1. //Test fuzzy search
  2. public void testFuzzySearch(String indexDirectory)throws Exception{
  3. Directory dir = FSDirectory.getDirectory(indexDirectory,false);
  4. IndexSearcher indexSearcher = new IndexSearcher(dir);
  5. String[] searchWords = {"text", "funny"};
  6. Query query;
  7. for(int i = 0; i < searchWords.length; i++){
  8. query = new FuzzyQuery(new Term("title",searchWords[i]));
  9. Hits results = indexSearcher.search(query);
  10. System.out.println(results.length() + "search results for query " + searchWords[i]);
  11. }
  12. }

范围搜索(Range Search)

范围搜索匹配某个域上的值在一定范围的文档。例如,查询 “age:[18 TO 35]” 返回所有 age 域上的值在 18 到 35 之间的文档。清单5显示了利用 Lucene 的 API 进行返回搜索的过程。

清单5:测试范围搜索

Java代码     
  1. //Test range search
  2. public void testRangeSearch(String indexDirectory)throws Exception{
  3. Directory dir = FSDirectory.getDirectory(indexDirectory,false);
  4. IndexSearcher indexSearcher = new IndexSearcher(dir);
  5. Term begin = new Term("birthDay","20000101");
  6. Term end   = new Term("birthDay","20060606");
  7. Query query = new RangeQuery(begin,end,true);
  8. Hits results = indexSearcher.search(query);
  9. System.out.println(results.length() + "search results is returned");
  10. }

转载于:https://www.cnblogs.com/bonelee/p/6601943.html

Lucene 的四大索引查询 ——bool 域搜索 通配符 范围搜索相关推荐

  1. Lucene教程--维护索引、查询对象和相关度排序

    1 索引维护 1.1 添加索引 步骤: 1)创建存放索引的目录Directory 2)创建索引器配置管理类IndexWriterConfig 3)使用索引目录和配置管理类创建索引器 4)使用索引器将D ...

  2. java搜索引擎创建索引_搜索引擎系列 ---lucene简介 创建索引和搜索初步

    一.什么是Lucene? Lucene最初是由Doug Cutting开发的,2000年3月,发布第一个版本,是一个全文检索引擎的架构,提供了完整的查询引擎和索引引擎 :Lucene得名于Doug妻子 ...

  3. lucene的建立索引,搜索,中文分词

    Lucene是apache软件基金会4 jakarta项目组的一个子项目,是一个开放源代码的全文检索引擎工具包. 现在最新的lucene已经更新到6.0版本了.但是这个最新版,需要适配jdk1.80以 ...

  4. 联合两个索引查询,已解决: 还有个进行多条件搜索 and 与 or 的操作

    1 联合两个索引查询,已解决: IndexSearcher[] searchers = new IndexSearcher[2]; searchers[0] = new IndexSearcher(m ...

  5. java之全文索引搜索lucene之增删改查文档与中文分词搜索

    java之全文索引搜索lucene之增删改查文档与中文分词搜索 接上文,接下来介绍一个lucene的各种query,然后介绍一下中文全文索引搜索. 对于各种query,我就直接上代码了,具体的话,我已 ...

  6. Lucene全文检索_索引创建

      因项目原因接触到了solr,感觉全文检索满神奇的,计算机的搜索文件功能应该都用过,非常慢.lucene建立一个索引库,而索引检索是非常快的.   假设文件系统,某个目录下有n个文件,每个文件有不同 ...

  7. apache lucene_Apache Lucene中的并发查询执行

    apache lucene Apache Lucene是一个出色的并发纯Java搜索引擎,如果您愿意,它可以轻松地使服务器上的可用CPU或IO资源饱和. "典型" Lucene应用 ...

  8. Apache Lucene中的并发查询执行

    Apache Lucene是一个出色的并发纯Java搜索引擎,如果您愿意,它可以轻松地使服务器上的可用CPU或IO资源饱和. "典型" Lucene应用程序的并发模型在搜索时每个查 ...

  9. Lucene.Net:关于索引的一些补充说明和总结

    在前面的几篇关于lucene的文章中,我已经简要说明了如何利用lucene进行分词.索引和搜索.最近大部分时间耗在查资料上,看得比较多比较杂但是一贯的不够深入,还好多数都是不会影响编程实践的概念性的东 ...

最新文章

  1. 项目/程序的流程走向
  2. ConfigParser-- 读取写入配置文件
  3. python web为什么不火-Python这么火,为何有人说Python不好找工作?
  4. 原来SMPlayer可以直接播放音乐CD碟
  5. JQuery 获取节点
  6. crt中 新建的连接存储在哪_连接昌邑路和浦东大道,这条新建道路的规划设计方案公示中...
  7. C语言数据结构(大话数据结构——笔记2)第四章:栈与队列
  8. 删除一个目录及其子目录下的所有.svn文件
  9. Git版本管理工具的使用
  10. 分布式架构的session问题
  11. vep文件如何转换mp4_如何将DVD的vob视频格式转换成mp4格式
  12. 计算机领域专业术语中英文对照(时常更新)
  13. 讲真,你知道Python咋来的吗?
  14. Android 系统(16)---应用启动过程
  15. 大数据_Hbase-(数据读取流程_hbase读取效率比较慢的原因)---Hbase工作笔记0008
  16. 【转载】Eclipse快捷键 10个最有用的快捷键
  17. 数组排列组合算法汇总
  18. Win10:ssh报错:RSA host key for 192.168.3.10 has changed and you have requested strict checking.
  19. 一步步完成FastDFS + Spring MVC上传下载整合示例
  20. java 绘制动态波形图6,折线图波形图绘制(动态绘制,实时变化)

热门文章

  1. C++实现Linux下弹出U盘的方法
  2. python读取文件模式_python如何读取文件的数据
  3. 软件自动升级ftp服务器,国人自己的专业FTP服务器软件(上)
  4. 计算机网络09年考研题,计算机网络考研真题及答案
  5. mysql providername_c#访问各数据库的providerName各驱动-阿里云开发者社区
  6. 字节跳动最新开源!java界面实现查询功能
  7. 【深度学习】基于Pytorch的softmax回归问题辨析和应用(一)
  8. 解决Python memory error的问题--扩充虚拟内存
  9. 机器学习(MACHINE LEARNING) 【周志华版-”西瓜书“-笔记】 DAY6-支持向量机
  10. 设计模板类,使得在创建一个对象时可以动态确定它的基类(public)