`

lucene 排序,过滤,高亮显示

 
阅读更多

 

package com.nanjing.chaoxing.lucene;

import com.nanjing.chaoxing.lucene.model.Book;
import com.nanjing.chaoxing.lucene.model.BookUtil;
import org.apache.log4j.Logger;
import org.apache.lucene.analysis.standard.StandardAnalyzer;
import org.apache.lucene.document.Document;
import org.apache.lucene.index.IndexReader;
import org.apache.lucene.queryParser.ParseException;
import org.apache.lucene.queryParser.QueryParser;
import org.apache.lucene.search.*;
import org.apache.lucene.search.highlight.*;
import org.apache.lucene.search.highlight.Scorer;
import org.apache.lucene.store.FSDirectory;
import org.apache.lucene.util.Version;
import org.junit.BeforeClass;
import org.junit.Test;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

public class SortAndFilterAndHighligher {
    private Logger logger = Logger.getLogger(SortAndFilterAndHighligher.class);

    @BeforeClass
    public static void init() throws IOException {
        BookUtil bookUtil = new BookUtil();
        bookUtil.createIndexWriter();
        bookUtil.createDocument();
    }

    /**
     * 排序并过滤
     * @throws IOException
     * @throws ParseException
     */
    @Test
    public void sort() throws IOException, ParseException {
        IndexReader indexReader = IndexReader.open(FSDirectory.open(BookUtil.indexFile));
        Query query = new QueryParser(Version.LUCENE_36, "bookid", new StandardAnalyzer(Version.LUCENE_36)).parse("6270000~");
        IndexSearcher indexSearcher = new IndexSearcher(indexReader);
        //数字过滤器
        NumericRangeFilter numericRangeFilter = NumericRangeFilter.newIntRange("year", 2010, 2012, true, true);
        //排序
        SortField sortField = new SortField("bookid", SortField.STRING);

        logger.info("sort" + " begin....");
        TopDocs topDocs = indexSearcher.search(query, numericRangeFilter, 1000, new Sort(sortField));
        ScoreDoc[] scoreDocs = topDocs.scoreDocs;
        for (int i = 0; i < scoreDocs.length; i++) {
            ScoreDoc scoreDoc = scoreDocs[i];
            int doc = scoreDoc.doc;
            for (Book book : BookUtil.bookList) {
                if (indexSearcher.doc(doc).get("bookid").equals(book.getBookid())) {
                    logger.info(book.toString());
                }
            }
        }
        logger.info("sort" + " end....\n");
    }


    /**
     * 高亮显示
     *
     * @throws ParseException
     * @throws IOException
     */
//    @Test
    public void highligher() throws ParseException, IOException, InvalidTokenOffsetsException {
        List<Book> books = new ArrayList<Book>();
        IndexReader indexReader = IndexReader.open(FSDirectory.open(BookUtil.indexFile));
        Query query = new QueryParser(Version.LUCENE_36, "author", new StandardAnalyzer(Version.LUCENE_36)).parse("jam~");
        IndexSearcher indexSearcher = new IndexSearcher(indexReader);
        SimpleHTMLFormatter simpleHTMLFormatter = new SimpleHTMLFormatter("<font color='red'>", "</font>");
        Scorer scorer = new QueryScorer(query);
        Highlighter highlighter = new Highlighter(simpleHTMLFormatter, scorer);
        Fragmenter fragmenter = new SimpleFragmenter(100);
        highlighter.setTextFragmenter(fragmenter);

        TopDocs topDocs = indexSearcher.search(query, 1000);
        ScoreDoc[] scoreDocs = topDocs.scoreDocs;
        System.out.println("高亮显示:");
        for (int i = 0; i < scoreDocs.length; i++) {
            int docid = scoreDocs[i].doc;
            float score = scoreDocs[i].score;//当前结果的相关度得分
            System.out.println("score is : " + score);
            Document doc = indexSearcher.doc(docid);
            String author = doc.get("author");
            String highterBooid = highlighter.getBestFragment(new StandardAnalyzer(Version.LUCENE_36), "author", author);
            for (Book book : BookUtil.bookList) {
                if (book.getBookid().equals(doc.get("bookid"))) {
                    book.setAuthor(highterBooid);
                    System.out.println(book.toString());
                }
            }
        }

    }
}
分享到:
评论

相关推荐

    Lucene 3.6 学习笔记

    目录 序言: 1 第一章 LUCENE基础 2 1.1 索引部分的核心类 2 1.2 分词部分的核心类 2 1.3 搜索部分的核心类 2 ...(2) 多个域高亮显示 62 6.4 近实时搜索 65 (1) 近实时搜索的创建 66 (2) 近实时搜索的使用 67

    Lucene3.教程.ppt(学习的ppt)

    Java全文检索器 Lucene3.6教程 搜索引擎介绍 Lucene介绍、结构分析 Lucene的全文索引实现 Lucene原理分析、优化 中文分词器使用 ...过滤与排序 常见的各种搜索 如果需要源码的,请到我的资源去找,谢谢

    Lucene in Action z中文版

    "Lucene in Action"是Lucene最... 这本著作论述了然后索引数据,还介绍了搜索、排序、过滤以及高亮显示搜索结果等方面的内容。  本书提供的实践方面的可重用示例以及一些中肯的建议,为您展示了一个奇妙的搜索世界。

    Lucene全文检索框架+Solr+ElasticSearch搜索引擎(Java高级必备.ES)

    7、通过Solr后台管理界面对索引进行CRUD高亮过滤排序分页 8、通过Solrj实现索引的添加更新 9、通过Solrj实现索引的删除 10、索引的检索_过滤_高亮等操作 11、项目实战应用 12、Solr知识点总结 1、熟练掌握...

    solr 企业搜索引擎教程

    Apache Lucene 实现。... 文本分析调试器,能够显示每个分析器每个阶段的结果  基于 WEB 的查询和调试输出:解析查询输出,Lucene 的 explain 方法细节,能够解释为 何某个文档打分低,被排除在结果中等等

    Go文本索引库Bleve.zip

    Bleve 是使用 Go 编写的现代化文本索引库,支持各种常用的搜索索引,包括过滤,排序和分类。当使用 Java 和 JVM 的时候使用比较多的是 Lucene,Elasticsearch 和 Solr。但是有时候不想要那么多依赖,想要避免外部...

    自己动手写搜索引擎(罗刚著).doc

    7.4 实现关键词高亮显示 191 7.5 实现多维视图 194 7.6 实现相似文档搜索 200 7.7 实现AJAX自动完成 203 7.7.1 总体结构 203 7.7.2 服务器端处理 203 7.7.3 浏览器端处理 205 7.7.4 服务器端改进 206 7.7.5 部署总结...

    SOLR的应用教程

    1.2.1 Solr使用Lucene并且进行了扩展 4 1.2.2 Schema(模式) 5 1.2.3 查询 5 1.2.4 核心 5 1.2.5 缓存 5 1.2.6 复制 6 1.2.7 管理接口 6 1.3 Solr服务原理 6 1.3.1 索引 6 1.3.2 搜索 7 1.4 源码结构 8 1.4.1 目录...

    Java EE常用框架.xmind

    比传统SQL多的功能:查询的结果有相关的排名,可以有高亮显示 存储数据的地方我们称之为索引库 原始记录表 分词表(倒排序表) 使用 将JavaBean对象封装到Document对象中 后通过IndexWriter把...

    java开源包1

    GWT Advanced Table 是一个基于 GWT 框架的网页表格组件,可实现分页数据显示、数据排序和过滤等功能! Google Tag Library 该标记库和 Google 有关。使用该标记库,利用 Google 为你的网站提供网站查询,并且可以...

    java开源包11

    GWT Advanced Table 是一个基于 GWT 框架的网页表格组件,可实现分页数据显示、数据排序和过滤等功能! Google Tag Library 该标记库和 Google 有关。使用该标记库,利用 Google 为你的网站提供网站查询,并且可以...

    java开源包2

    GWT Advanced Table 是一个基于 GWT 框架的网页表格组件,可实现分页数据显示、数据排序和过滤等功能! Google Tag Library 该标记库和 Google 有关。使用该标记库,利用 Google 为你的网站提供网站查询,并且可以...

    java开源包3

    GWT Advanced Table 是一个基于 GWT 框架的网页表格组件,可实现分页数据显示、数据排序和过滤等功能! Google Tag Library 该标记库和 Google 有关。使用该标记库,利用 Google 为你的网站提供网站查询,并且可以...

    java开源包6

    GWT Advanced Table 是一个基于 GWT 框架的网页表格组件,可实现分页数据显示、数据排序和过滤等功能! Google Tag Library 该标记库和 Google 有关。使用该标记库,利用 Google 为你的网站提供网站查询,并且可以...

    java开源包5

    GWT Advanced Table 是一个基于 GWT 框架的网页表格组件,可实现分页数据显示、数据排序和过滤等功能! Google Tag Library 该标记库和 Google 有关。使用该标记库,利用 Google 为你的网站提供网站查询,并且可以...

    java开源包10

    GWT Advanced Table 是一个基于 GWT 框架的网页表格组件,可实现分页数据显示、数据排序和过滤等功能! Google Tag Library 该标记库和 Google 有关。使用该标记库,利用 Google 为你的网站提供网站查询,并且可以...

    java开源包4

    GWT Advanced Table 是一个基于 GWT 框架的网页表格组件,可实现分页数据显示、数据排序和过滤等功能! Google Tag Library 该标记库和 Google 有关。使用该标记库,利用 Google 为你的网站提供网站查询,并且可以...

    java开源包8

    GWT Advanced Table 是一个基于 GWT 框架的网页表格组件,可实现分页数据显示、数据排序和过滤等功能! Google Tag Library 该标记库和 Google 有关。使用该标记库,利用 Google 为你的网站提供网站查询,并且可以...

    java开源包7

    GWT Advanced Table 是一个基于 GWT 框架的网页表格组件,可实现分页数据显示、数据排序和过滤等功能! Google Tag Library 该标记库和 Google 有关。使用该标记库,利用 Google 为你的网站提供网站查询,并且可以...

    java开源包9

    GWT Advanced Table 是一个基于 GWT 框架的网页表格组件,可实现分页数据显示、数据排序和过滤等功能! Google Tag Library 该标记库和 Google 有关。使用该标记库,利用 Google 为你的网站提供网站查询,并且可以...

Global site tag (gtag.js) - Google Analytics