代码之家  ›  专栏  ›  技术社区  ›  Andrew Bullock

Lucene.NET highlighter插件奇怪地突出显示

  •  1
  • Andrew Bullock  · 技术社区  · 14 年前

    我正在尝试将Lucene.NET的Highlighter添加到我的搜索中,但是它做了一些非常奇怪的突出显示,我做错了什么?

    // stuff here to get scoreDocs
    
    var content = doc.GetField("content").StringValue();
    // content = "Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been"
    
    
    var highlighter = new Highlighter(new StrongFormatter(), new HtmlEncoder(), new QueryScorer(query.Rewrite(indexSearcher.GetIndexReader())));
    highlighter.SetTextFragmenter(new SimpleFragmenter(100));
    var tokenStream = analyzer.TokenStream("content", new StringReader(content));
    
    var bestFragment = highlighter.GetBestFragment(tokenStream, content);
    

    寻找 "lorem" 给我这个最佳片段值:

    <strong>Lorem</strong> <strong>Ipsum</strong> is <strong>simply</strong> <strong>dummy</strong> <strong>text</strong> of the <strong>printing</strong> and <strong>typesetting</strong> <strong>industry</strong>. <strong>Lorem</strong> <strong>Ipsum</strong> <strong>has</strong> <strong>been</strong>
    

    "Lorem" . 为什么?

    我该如何让这种行为合理?

    我用的是 StandardAnalyzer 我的问题是 "content:lorem"

    编辑:*

    谢谢

    1 回复  |  直到 14 年前
        1
  •  3
  •   sisve    14 年前

    你还没有提交 StrongFormatter HtmlEncoder TokenGroup 决定是否需要任何格式。

    public class StrongFormatter : Formatter {
        public String HighlightTerm(String originalText, TokenGroup tokenGroup) {
            var score = tokenGroup.GetTotalScore();
            if (score == 0)
                return originalText;
    
            return String.Concat("<strong>", originalText, "<strong>");
        }
    }
    

    但是,您并不是第一个希望在html元素中包装匹配项的人。你可以用 SimpleHTMLFormatter SimpleHTMLEncoder 可能是你的HtmlEncoder做的。

    推荐文章