lucene 的排序

  1. package cn.itcast.lucene;
  2.  
  3. import java.io.IOException;
  4.  
  5. import org.apache.lucene.document.Document;
  6. import org.apache.lucene.queryparser.classic.MultiFieldQueryParser;
  7. import org.apache.lucene.queryparser.classic.QueryParser;
  8. import org.apache.lucene.search.IndexSearcher;
  9. import org.apache.lucene.search.Query;
  10. import org.apache.lucene.search.ScoreDoc;
  11. import org.apache.lucene.search.Sort;
  12. import org.apache.lucene.search.SortField;
  13. import org.apache.lucene.search.TopDocs;
  14. import org.apache.lucene.search.SortField.Type;
  15.  
  16. import cn.itcast.uitls.LuceneUtils;
  17.  
  18. /**
  19. *
  20. * 根据lucene 的字段的名称进行排序...
  21. *
  22. * 对查询出来的结果进行排序\
  23. * 加了排序条件之后,每个文档得分将失效..
  24. * @author Administrator
  25. *
  26. */
  27. public class TestSort1 {
  28.  
  29. public static void main(String[] args) throws Exception {
  30. IndexSearcher indexSearcher=LuceneUtils.getIndexSearcher();
  31. String keywords="全文检索服务器";
  32.  
  33. String fields []={"content"};
  34.  
  35. QueryParser queryParser=new MultiFieldQueryParser(LuceneUtils.getVersion(),fields,LuceneUtils.getAnalyzer());
  36.  
  37. Query query=queryParser.parse(keywords);
  38.  
  39. //需要根据那个字段进行排序
  40. /**
  41. * 1:需要根据那个字段进行排序
  42. *
  43. * 2:排序的字段对应的类型
  44. *
  45. * 3:是否反转 (升序(true) 降序 (false))
  46. *
  47. */
  48. SortField sortField=new SortField("id", Type.INT,true);
  49. //设置排序的条件
  50. Sort sort=new Sort(sortField);
  51. TopDocs topDocs=indexSearcher.search(query, 100, sort);
  52. ScoreDoc scoreDocs[]=topDocs.scoreDocs;
  53. for(ScoreDoc scoreDoc :scoreDocs){
  54. //根据id 去击中一个文档呢..
  55. Document document=indexSearcher.doc(scoreDoc.doc);
  56. //每个文档都有一个得分,这个得分是float 类型,他是lucene 自己内部算出来,VSM
  57. System.out.println("id==="+document.get("id")+"得分===="+scoreDoc.score);
  58. System.out.println("title==="+document.get("title"));
  59. System.out.println("content==="+document.get("content"));
  60. System.out.println("url==="+document.get("url"));
  61. System.out.println("author==="+document.get("author"));
  62.  
  63. }
  64. }
  65.  
  66. }

lucene  的过滤器

  1. package cn.itcast.lucene;
  2.  
  3. import java.io.IOException;
  4.  
  5. import org.apache.lucene.document.Document;
  6. import org.apache.lucene.queryparser.classic.MultiFieldQueryParser;
  7. import org.apache.lucene.queryparser.classic.QueryParser;
  8. import org.apache.lucene.search.Filter;
  9. import org.apache.lucene.search.IndexSearcher;
  10. import org.apache.lucene.search.NumericRangeFilter;
  11. import org.apache.lucene.search.Query;
  12. import org.apache.lucene.search.ScoreDoc;
  13. import org.apache.lucene.search.TopDocs;
  14.  
  15. import cn.itcast.uitls.LuceneUtils;
  16.  
  17. /**
  18. *
  19. * 对查询出来的结果进行过滤,以获得更小范围的结果...
  20. * @author Administrator
  21. *
  22. */
  23. public class TestFilter {
  24. public static void main(String[] args) throws Exception {
  25. IndexSearcher indexSearcher=LuceneUtils.getIndexSearcher();
  26. String keywords="全文检索服务器";
  27.  
  28. String fields []={"content"};
  29.  
  30. QueryParser queryParser=new MultiFieldQueryParser(LuceneUtils.getVersion(),fields,LuceneUtils.getAnalyzer());
  31.  
  32. Query query=queryParser.parse(keywords);
  33.  
  34. //过滤器
  35. /**
  36. * 1:需要根据那个字段进行过滤
  37. *
  38. * 2:字段对应范围的最小值
  39. *
  40. * 3:字段对应范围的最大值
  41. *
  42. * 4:是否包含最小值
  43. *
  44. * 5:是否包含最大值...
  45. *
  46. */
  47. /**
  48. *
  49. * Filter 是一个抽象类,我们后面可以继承它,来定义我们 自己的过滤规则,
  50. *
  51. * 使用过滤的效率比较低,我们在后面可以使用其它查询条件实现一样的效果,性能比过滤器要高...
  52. */
  53. Filter filter=NumericRangeFilter.newIntRange("id",2, 10,true, false);
  54.  
  55. TopDocs topDocs=indexSearcher.search(query, filter, 100);
  56.  
  57. ScoreDoc scoreDocs[]=topDocs.scoreDocs;
  58. for(ScoreDoc scoreDoc :scoreDocs){
  59. //根据id 去击中一个文档呢..
  60. Document document=indexSearcher.doc(scoreDoc.doc);
  61. //每个文档都有一个得分,这个得分是float 类型,他是lucene 自己内部算出来,VSM
  62. System.out.println("id==="+document.get("id"));
  63. System.out.println("title==="+document.get("title"));
  64. System.out.println("content==="+document.get("content"));
  65. System.out.println("url==="+document.get("url"));
  66. System.out.println("author==="+document.get("author"));
  67. }
  68.  
  69. }
  70. }

lucene 的高亮器的使用

  1. package cn.itcast.lucene;
  2.  
  3. import java.io.IOException;
  4. import java.util.ArrayList;
  5. import java.util.List;
  6.  
  7. import org.apache.lucene.document.Document;
  8. import org.apache.lucene.queryparser.classic.MultiFieldQueryParser;
  9. import org.apache.lucene.queryparser.classic.QueryParser;
  10. import org.apache.lucene.search.IndexSearcher;
  11. import org.apache.lucene.search.Query;
  12. import org.apache.lucene.search.ScoreDoc;
  13. import org.apache.lucene.search.Sort;
  14. import org.apache.lucene.search.SortField;
  15. import org.apache.lucene.search.TopDocs;
  16. import org.apache.lucene.search.SortField.Type;
  17. import org.apache.lucene.search.highlight.Formatter;
  18. import org.apache.lucene.search.highlight.Highlighter;
  19. import org.apache.lucene.search.highlight.QueryScorer;
  20. import org.apache.lucene.search.highlight.Scorer;
  21. import org.apache.lucene.search.highlight.SimpleHTMLFormatter;
  22.  
  23. import cn.itcast.bean.Article;
  24. import cn.itcast.uitls.LuceneUtils;
  25.  
  26. /**
  27. *
  28. * 测试高亮,
  29. *
  30. * 使用高亮的时候我们需要导入两个jar
  31. * lucene-highlighter-4.4.0.jar
  32. * lucene-memory-4.4.0.jar
  33. *
  34. *
  35. * @author Administrator
  36. * 对查询出来的结果当中包含的搜索关键字进行高亮...
  37. */
  38. public class TestHighlighter {
  39.  
  40. public static void main(String[] args) throws Exception {
  41. IndexSearcher indexSearcher=LuceneUtils.getIndexSearcher();
  42. String keywords="全文检索服务器";
  43. String fields []={"content"};
  44. QueryParser queryParser=new MultiFieldQueryParser(LuceneUtils.getVersion(),fields,LuceneUtils.getAnalyzer());
  45. Query query=queryParser.parse(keywords);
  46. TopDocs topDocs=indexSearcher.search(query, 1);
  47. ScoreDoc scoreDocs[]=topDocs.scoreDocs;
  48.  
  49. //高亮显示的格式...
  50. // solr 是基于lucene 的<font color='blue'>全</font><font color='blue'>文</font><font color='blue'>检</font>索服务器
  51. Formatter formatter=new SimpleHTMLFormatter("<font color='red'>","</font>");
  52.  
  53. //与query 查询条件进行关联,因为query 包含了搜索的关键字
  54. //只有知道了搜索的关键字,高亮显示的格式,我才能把一段文本进行高亮...
  55. Scorer scorer=new QueryScorer(query);
  56.  
  57. //创建一个高亮器,我们使用lucene 自带的高亮器进行高亮..
  58. Highlighter highlighter=new Highlighter(formatter,scorer);
  59.  
  60. List<Article> articles=new ArrayList<Article>();
  61.  
  62. Article article=null;
  63.  
  64. for(ScoreDoc scoreDoc :scoreDocs){
  65. article=new Article();
  66. Document document=indexSearcher.doc(scoreDoc.doc);
  67. String title=document.get("title");
  68. String content=document.get("content");
  69. System.out.println("id=="+document.get("id"));
  70. System.out.println("title==="+title);
  71. System.out.println("content==="+content);
  72. System.out.println("没有高亮之前的结果....----------------------------------------------------");
  73.  
  74. if(content!=null){
  75. //返回高亮过后的文本...
  76. String highcontent=highlighter.getBestFragment(LuceneUtils.getAnalyzer(), "content", content);
  77. System.out.println("高亮过后的highcontent="+highcontent);
  78. if(highcontent==null){
  79. article.setContent(content);
  80. }else{
  81. article.setContent(highcontent);
  82. }
  83. }
  84.  
  85. if(title!=null){
  86. String hightitle=highlighter.getBestFragment(LuceneUtils.getAnalyzer(), "title", title);
  87.  
  88. //假设我们对一段文本进行高亮,如果这段文本当中不包含搜索关键字,对这段文本高亮,返回的结果为null
  89. System.out.println("高亮过后的hightitle="+hightitle);
  90.  
  91. //不能把null 返回到客户端,所以我们需要进行判断,如果为null值,就返回没有高亮之前的文本,
  92. if(hightitle==null){
  93. article.setTitle(title);
  94. }else{
  95. article.setTitle(hightitle);
  96. }
  97.  
  98. }
  99.  
  100. //title 当中有没有可能不包含搜索的关键字...
  101.  
  102. }
  103. }
  104.  
  105. }

lucene 查询条件的使用

  1. package cn.itcast.lucene;
  2.  
  3. import java.io.IOException;
  4.  
  5. import org.apache.lucene.document.Document;
  6. import org.apache.lucene.index.Term;
  7. import org.apache.lucene.queryparser.classic.MultiFieldQueryParser;
  8. import org.apache.lucene.queryparser.classic.ParseException;
  9. import org.apache.lucene.queryparser.classic.QueryParser;
  10. import org.apache.lucene.search.BooleanQuery;
  11. import org.apache.lucene.search.FuzzyQuery;
  12. import org.apache.lucene.search.IndexSearcher;
  13. import org.apache.lucene.search.MatchAllDocsQuery;
  14. import org.apache.lucene.search.NumericRangeQuery;
  15. import org.apache.lucene.search.PhraseQuery;
  16. import org.apache.lucene.search.Query;
  17. import org.apache.lucene.search.ScoreDoc;
  18. import org.apache.lucene.search.TermQuery;
  19. import org.apache.lucene.search.TopDocs;
  20. import org.apache.lucene.search.WildcardQuery;
  21. import org.apache.lucene.search.BooleanClause.Occur;
  22.  
  23. import cn.itcast.uitls.LuceneUtils;
  24.  
  25. public class TestQuery {
  26.  
  27. public static void main(String[] args) throws IOException, ParseException {
  28. // article.setId(i); intfield
  29. // article.setTitle("lucene 是传智播客一个工具包"); textfield
  30. // article.setContent("solr 是基于lucene 的全文检索服务器"); textfield
  31. // article.setUrl("http://apche.cn"); StringField
  32. // article.setAuthor("爱新觉罗王姐杰杰结节"); StringField
  33.  
  34. // 1:第一种查询条件: 单字段查询..
  35. // Query query=new TermQuery(new Term("title","传"));
  36.  
  37. //2:第二种查询:多字段查询,字符串搜索...
  38. // String fields []={"title"};
  39. //
  40. // String keywords="传智播客";
  41. //
  42. // QueryParser queryParser=new MultiFieldQueryParser(LuceneUtils.getVersion(),fields,LuceneUtils.getAnalyzer());
  43. // //会使用分词器把关键字进行分词之后再组拼查询条件...
  44. // Query query=queryParser.parse(keywords);
  45.  
  46. //第三种查询:查询所有..
  47. // Query query=new MatchAllDocsQuery();
  48. //第四种查询,通配符查询...
  49. //? 代表单个的任意字符,* 代表是多个任意字符
  50. //使用*代表匹配的结果越多,性能越低...
  51. // Query query=new WildcardQuery(new Term("title","luce*"));
  52.  
  53. //第五种查询:范围查询:可以使用此查询来替代过滤器..
  54. // Query query=NumericRangeQuery.newIntRange("id", 1, 10, true, false);
  55.  
  56. //第六种查询:模糊查询...
  57. /**
  58. * 1:查询的条件term
  59. *
  60. * 2:maxEidts 默认值为2 ,最大的可编辑数,允许我的查询当中的值可以错误几个字符..
  61. *
  62. */
  63. // FuzzyQuery query=new FuzzyQuery(new Term("author","爱新觉罗王姐杰杰班长"),2);
  64.  
  65. // /第七种查询:短语查询:
  66.  
  67. // PhraseQuery query=new PhraseQuery();
  68. // //lucene 是传智播客一个工具包
  69. // query.add(new Term("title", "lucene"));
  70. // query.add(new Term("title", "具"));
  71. //
  72. // //设置两个短语之间的最大间隔数..
  73. // //如果设置短语的间隔越小,越是我们想要的数据,
  74. // //如果设置的短语的间隔越大,被匹配到的内容越多,性能越慢...
  75. // query.setSlop(1111111111);
  76.  
  77. //第八种查询,boolean 类型的查询..
  78.  
  79. BooleanQuery query=new BooleanQuery();
  80.  
  81. //查询条件1
  82. //1,9
  83. Query query1=NumericRangeQuery.newIntRange("id", 1, 10, true, false);
  84.  
  85. //6~17
  86. Query query2=NumericRangeQuery.newIntRange("id", 6, 18, true, false);
  87.  
  88. //select * from table where username ="bangzhang" and sex ='nv'
  89.  
  90. //boolean 组拼多个查询条件,取交集...
  91. //=
  92. query.add(query1,Occur.MUST);
  93.  
  94. //!=
  95. query.add(query2, Occur.MUST_NOT);
  96.  
  97. //or
  98. query.add(query2, Occur.SHOULD);
  99.  
  100. testQuery(query);
  101. }
  102.  
  103. public static void testQuery(Query query) throws IOException{
  104. IndexSearcher indexSearcher=LuceneUtils.getIndexSearcher();
  105. TopDocs topDocs=indexSearcher.search(query, 100);
  106. ScoreDoc scoreDocs[]=topDocs.scoreDocs;
  107. for(ScoreDoc scoreDoc :scoreDocs){
  108. //根据id 去击中一个文档呢..
  109. Document document=indexSearcher.doc(scoreDoc.doc);
  110. //每个文档都有一个得分,这个得分是float 类型,他是lucene 自己内部算出来,VSM
  111. System.out.println("id==="+document.get("id"));
  112. System.out.println("title==="+document.get("title"));
  113. System.out.println("content==="+document.get("content"));
  114. System.out.println("url==="+document.get("url"));
  115. System.out.println("author==="+document.get("author"));
  116.  
  117. }
  118.  
  119. }
  120. }

Lucene笔记二的更多相关文章

  1. 《CMake实践》笔记二:INSTALL/CMAKE_INSTALL_PREFIX

    <CMake实践>笔记一:PROJECT/MESSAGE/ADD_EXECUTABLE <CMake实践>笔记二:INSTALL/CMAKE_INSTALL_PREFIX &l ...

  2. jQuery源码笔记(二):定义了一些变量和函数 jQuery = function(){}

    笔记(二)也分为三部分: 一. 介绍: 注释说明:v2.0.3版本.Sizzle选择器.MIT软件许可注释中的#的信息索引.查询地址(英文版)匿名函数自执行:window参数及undefined参数意 ...

  3. Mastering Web Application Development with AngularJS 读书笔记(二)

    第一章笔记 (二) 一.scopes的层级和事件系统(the eventing system) 在层级中管理的scopes可以被用做事件总线.AngularJS 允许我们去传播已经命名的事件用一种有效 ...

  4. Python 学习笔记二

    笔记二 :print 以及基本文件操作 笔记一已取消置顶链接地址 http://www.cnblogs.com/dzzy/p/5140899.html 暑假只是快速过了一遍python ,现在起开始仔 ...

  5. WPF的Binding学习笔记(二)

    原文: http://www.cnblogs.com/pasoraku/archive/2012/10/25/2738428.htmlWPF的Binding学习笔记(二) 上次学了点点Binding的 ...

  6. webpy使用笔记(二) session/sessionid的使用

    webpy使用笔记(二) session的使用 webpy使用系列之session的使用,虽然工作中使用的是django,但是自己并不喜欢那种大而全的东西~什么都给你准备好了,自己好像一个机器人一样赶 ...

  7. AJax 学习笔记二(onreadystatechange的作用)

    AJax 学习笔记二(onreadystatechange的作用) 当发送一个请求后,客户端无法确定什么时候会完成这个请求,所以需要用事件机制来捕获请求的状态XMLHttpRequest对象提供了on ...

  8. 《MFC游戏开发》笔记二 建立工程、调整窗口

    本系列文章由七十一雾央编写,转载请注明出处.  http://blog.csdn.net/u011371356/article/details/9300383 作者:七十一雾央 新浪微博:http:/ ...

  9. JavaScript基础笔记二

    一.函数返回值1.什么是函数返回值    函数的执行结果2. 可以没有return // 没有return或者return后面为空则会返回undefined3.一个函数应该只返回一种类型的值 二.可变 ...

随机推荐

  1. nodejs module/require

    1. wrap up a module using module.exports, name the file to a.js var fun1=function(){ var stylus = re ...

  2. Tomcat7 调优及 JVM 参数优化

      Tomcat 的缺省配置是不能稳定长期运行的,也就是不适合生产环境,它会死机,让你不断重新启动,甚至在午夜时分唤醒你.对于操作系统优化来说,是尽可能的增大可使用的内存容量.提高CPU 的频率,保证 ...

  3. iOS - Foundation相关

    1.NSString         A.创建的方式:            stringWithFormat:格式化字符串  ,创建字符串对象在堆区域            @"jack& ...

  4. centos7系统配置系统用户基于ssh的google身份验证

    最近也是服务器各种被入侵,所以在安全上,要万分注意,特此记录,借助google的身份验证插件,获取动态验证码完成ssh登陆. OS: centos7 安装配置: 1. 安装epel源 yum -y i ...

  5. hdu1176免费馅饼(动态规划,数塔)

    免费馅饼 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submis ...

  6. MySQL☞lower函数

    lower(列名/字符串):将大写字母改成小写字母 格式: select  lower(列名/字符串)  from  表名 如下图:

  7. Selenium 入门到精通系列:三

    Selenium 入门到精通系列 PS:Driver_Element 常用方法 例子 #!/usr/bin/env python # -*- coding: utf-8 -*- # @Date : 2 ...

  8. Unity热更新文件的服务器部署(IIS)

    1.VS新建一个"ASP.NET空网站" 工程结构如下 最好设置.Net FrameWork版本为 V4.0或者V4.5版本的,因为我们的程序最后是要部署到阿里云的虚拟服务器上的, ...

  9. NGUI制作流光效果

    效果展示: 技巧: 1.勾选UIPanel下的Normal启用UI的法线贴图,并建立带有法线贴图的UI对象(此处用NGUI自带的Reflector.Atlas中的图作为UI). 2.建立点光源并为其添 ...

  10. 【WXS数据类型】Function

    属性: 名称 值类型 说明 [Function].constructor [String] 返回值为“Function”,表示类型的结构字符串 [Function].length [Number] 返 ...