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. }

Lucene 的四大索引查询 ——bool 域搜索 通配符 范围搜索的更多相关文章

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

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

  2. lucene简介 创建索引和搜索初步

    lucene简介 创建索引和搜索初步 一.什么是Lucene? Lucene最初是由Doug Cutting开发的,2000年3月,发布第一个版本,是一个全文检索引擎的架构,提供了完整的查询引擎和索引 ...

  3. Lucene第二讲——索引与搜索

    一.Feild域 1.Field域的属性 是否分词:Tokenized 是:对该field存储的内容进行分词,分词的目的,就是为了索引. 否:不需要对field存储的内容进行分词,不分词,不代表不索引 ...

  4. Lucene的数值索引以及范围查询

    对文本搜索引擎的倒排索引(数据结构和算法).评分系统.分词系统都清楚掌握之后,本人对数值索引和搜索一直有很大的兴趣,最近对Lucene对数值索引和范围搜索做了些学习,并将主要内容整理如下: 1. Lu ...

  5. lucene复合条件查询案例——查询name域 或 description域 包含lucene关键字的两种方式

    方式一:使用语法表达式查询 //查询name域 或 description域包含lucene关键字 QueryParser queryParser = new QueryParser("na ...

  6. Lucene.Net 优化索引生成,即搜索显示优化

    最近发现站内搜索引擎响应速度很慢,因为刚来公司之前技术员跑了源码什么的都没留下.只好自己手动破解源代码dll查找问题所在! 这个问题代码就暂时不贴了这里只写思路 原逻辑:经过整体分析后发现之前是使用 ...

  7. lucene.net 3.0.3、结合盘古分词进行搜索的小例子(转)

    lucene.net 3.0.3.结合盘古分词进行搜索的小例子(分页功能)   添加:2013-12-25 更新:2013-12-26 新增分页功能. 更新:2013-12-27 新增按分类查询功能, ...

  8. Lucene 06 - 使用Lucene的Query API查询数据

    目录 1 Query对象的创建(方式一): 使用子类对象 1.1 常用的Query子类对象 1.2 常用的Query子类对象使用 1.2.1 使用TermQuery 1.2.2 使用NumericRa ...

  9. lucene&solr学习——索引维护

    1.索引库的维护 索引库删除 (1) 全删除 第一步:先对文档进行分析 public IndexWriter getIndexWriter() throws Exception { // 第一步:创建 ...

随机推荐

  1. AnyChart图表仪表控件在Flex环境下使用

    AnyChart控件是一款当前流行的数据可视化解决方案,使客户可以创建交互地.生动的图表.实时仪表和地图.同时支持Flash和HTML5显示,控件提供极好的视觉外观和配色方案能够使客户根据不同的需求设 ...

  2. Codeforces Round #265 (Div. 2) C 暴力+ 找规律+ 贪心

    C. No to Palindromes! time limit per test 1 second memory limit per test 256 megabytes input standar ...

  3. 在 Windows 下用 TDM-GCC(MinGW)开发 DLL 涉及到数据同步锁及 DLL 初始化终止化函数的问题

    在 Windows 下用 TDM-GCC(MinGW)开发 DLL 如果要用到数据同步锁,理论上可以采用 Windows API 提供的临界区实现(需要用到的函数有 InitializeCritica ...

  4. BZOJ——1614: [Usaco2007 Jan]Telephone Lines架设电话线

    Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 1930  Solved: 823[Submit][Status][Discuss] Description ...

  5. IntelliJ IDEA删除项目

    删除项目一向比较奇葩,因为当你点击到该项目名称右键时,并没有delete选项,导致我们不知道怎么删除,查找多方文档,得到以下解决: 1.将鼠标移到要删除的项目名称上,单击并按“Delete”按钮删除项 ...

  6. 使用java连接AD域,验证账号密码是否正确

    eb项目中有时候客户要求我们使用ad域进行身份确认,不再另外做一套用户管理系统.其实客户就是只要一套账号可以访问所有的OA,CRM等办公系统.这就是第三方验证.一般有AD域,Ldap,Radius,邮 ...

  7. 具体解释window.history

    Window.history保存用户在一个会话期间的站点訪问记录,用户每次訪问一个新的URL即创建一个新的历史记录. history.go().history.back().history.forwa ...

  8. Android新技术学习——阿里巴巴免Root无侵入AOP框架Dexposed

    阿里巴巴无线事业部近期开源的Android平台下的无侵入运行期AOP框架Dexposed,该框架基于AOP思想,支持经典的AOP使用场景.可应用于日志记录,性能统计,安全控制.事务处理.异常处理等方面 ...

  9. hadoop优质链接

    http://wiki.apache.org/hadoop/FAQ

  10. <bgsound> - 背景音乐

    摘要 项目 说明 形式 <bgsound src="..."> 支持 e2+ 标签省略 开始标签:必须,结束标签:无 ■ 说明 bgsound 是 background ...