• lucene 过滤结果


     1 package cn.itcast.h_filter;
     2 
     3 import java.util.ArrayList;
     4 import java.util.List;
     5 
     6 import org.apache.lucene.document.Document;
     7 import org.apache.lucene.queryParser.MultiFieldQueryParser;
     8 import org.apache.lucene.queryParser.QueryParser;
     9 import org.apache.lucene.search.Filter;
    10 import org.apache.lucene.search.IndexSearcher;
    11 import org.apache.lucene.search.NumericRangeFilter;
    12 import org.apache.lucene.search.Query;
    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.util.Version;
    17 import org.junit.Test;
    18 
    19 import cn.itcast._domain.Article;
    20 import cn.itcast._util.ArticleDocumentUtils;
    21 import cn.itcast._util.LuceneUtils;
    22 
    23 public class TestApp {
    24 
    25     // 搜索
    26     @Test
    27     public void testSearch() throws Exception {
    28         // 准备查询条件
    29         String queryString = "lucene";
    30 
    31         // 执行搜索
    32         List<Article> list = new ArrayList<Article>();
    33 
    34         // 1,把查询字符串转为Query对象(从title和content中查询)
    35         QueryParser queryParser = new MultiFieldQueryParser(Version.LUCENE_30, new String[] { "title", "content" }, LuceneUtils.getAnalyzer());
    36         Query query = queryParser.parse(queryString);
    37 
    38         // 2,执行查询,得到中间结果
    39         IndexSearcher indexSearcher = new IndexSearcher(LuceneUtils.getDirectory()); // 指定所用的索引库
    40         // TopDocs topDocs = indexSearcher.search(query, 100); // 最多返回前n条结果
    41 
    42         // ========================================================================================== 【创建高亮器】
    43         // indexSearcher.search(query, n);
    44         // indexSearcher.search(query, filter, n);
    45         // indexSearcher.search(query, filter, n, sort);
    46 
    47         Filter filter = NumericRangeFilter.newIntRange("id", 5, 15, false, true); // null表示没有过滤条件   选择 (5,15] 之间的过滤的数据,后面的boolean判断 括号开闭用处的
    48         TopDocs topDocs = indexSearcher.search(query, filter, 100);
    49 
    50         // ==========================================================================================
    51 
    52         // 3,处理结果
    53         for (int i = 0; i < topDocs.scoreDocs.length; i++) {
    54             // 根据编号拿到Document数据
    55             int docId = topDocs.scoreDocs[i].doc; // Document的内部编号
    56             Document doc = indexSearcher.doc(docId);
    57             // 把Document转为Article
    58             Article article = ArticleDocumentUtils.documentToArticle(doc);
    59             list.add(article);
    60         }
    61         indexSearcher.close();
    62 
    63         // 显示结果
    64         System.out.println("总结果数:" + list.size());
    65         for (Article a : list) {
    66             System.out.println("------------------------------");
    67             System.out.println("id = " + a.getId());
    68             System.out.println("title = " + a.getTitle());
    69             System.out.println("content = " + a.getContent());
    70         }
    71     }
    72 }
  • 相关阅读:
    C++中char*,String,int,CString间转换
    获取本地MAC地址和多IP
    子窗口
    linux记录键盘
    curses和窗口
    使用curses函数写的hello world 程序
    Java 复习笔记
    Ubuntu apt install 下载软件很慢的解决办法
    Ubuntu python多个版本管理
    VMware下的Ubuntu16设置连接主机网络,设置主机下可以通过xshell访问 VMware下的Ubuntu
  • 原文地址:https://www.cnblogs.com/friends-wf/p/3796712.html
Copyright © 2020-2023  润新知