首页 新闻 会员 周边 捐助

求助!如何使用lucene对关键词高亮时不使用分词器

0
悬赏园豆:100 [待解决问题]

变量声明

private SimpleAnalyzer analyzer;
    private QueryParser qp;
    private Query query;
    private Fragmenter fragmenter;
    private SimpleHTMLFormatter simpleHTMLFormatter = new SimpleHTMLFormatter(
            "<span style='color:red'>", "</span>");
    private Highlighter highlighter;
    private TokenStream tokenStream;

已实现高亮关键词,但是会被分词

                 //构建分词器
                 analyzer =  new SimpleAnalyzer();
                // 使用QueryParser查询分析器构造Query对象
                qp = new QueryParser("", analyzer);
                // 空格表示or
                // qp.setDefaultOperator(QueryParser.);
                // 添加要查询的关键词
                query = qp.parse(mp.get(i)[0]);
                // 添加链接样式
                simpleHTMLFormatterURL = new SimpleHTMLFormatter("<a href='http://"
                        + mp.get(i)[1] + "'  target='view_blank' <span style='color:blue'> ", "</span> </a>");
                highlighter = new Highlighter(simpleHTMLFormatterURL,
                        new QueryScorer(query));
                // 设置文本长度
                fragmenter = new SimpleFragmenter(num);
                highlighter.setTextFragmenter(fragmenter);
                // 输出结果
                tokenStream = analyzer.tokenStream("", new StringReader(field));
                String tex = highlighter.getBestFragment(tokenStream, field);                

要求是精确匹配,所以不需要用到分词器,第一次使用Lucene,可能注释有点不准确,请教大神!!

Baijv的主页 Baijv | 初学一级 | 园豆:102
提问于:2017-04-16 21:13
< >
分享
所有回答(2)
0

 “已实现高亮关键词,但是会被分词”不太明白什么意思,可以举例说明一下

约个十月天 | 园豆:411 (菜鸟二级) | 2017-04-26 10:01

比如将“中华上下五千年历史”作为要添加高亮的文本,高亮词是“中华人民”,会被分词就是文中出现了“中华”也会被添加高亮

支持(0) 反对(0) Baijv | 园豆:102 (初学一级) | 2017-04-26 15:53
0

如果你使用Lucene的普通高亮组件Highlighter ,那么分词器是必须的,它需要把你的待高亮文本分词,再根据你的查询关键词去匹配然后高亮。你可以尝试着将查询关键词,使用粗粒度分词器分词,也就是“中华人民”分词的结果就是“中华人民”。类似,“中华人民”这样作为专有名字,在查询时不应该被分词,否则会影响搜索效果。

博客园团队 | 园豆:5379 (大侠五级) | 2018-02-05 16:29
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册