我是Lucene的新手。
我已经实现了Analyzer和一些过滤器。原始令牌流被修改,属性作为标记插入,其中PositionIncrementAttrbute为0.
Ex:句子:“SO很有名” 在通过自定义分析器和几个过滤器并将属性附加到令牌之后,我们得到的新令牌流是 “SO Noun SocialSite着名的JJ积极” 我基本上在这里试图标记每个单词。 SO既是Noun又是SocialSite,着名的是Adjective(JJ),是一个积极的词等。
现在可以根据属性进行搜索(这里:Noun,SocialSite,JJ,Positive)。我可以搜索“Noun”或者说“Positive”,并且仍然可以获得“SO is famous”作为输出。
然而,由于我在添加文档的同时将整个文本“SO is famous”作为Field,当我搜索说“SocialSite”时,我得到一个文档作为输出,其中“SO很有名”作为一个的领域。
但是,是否可以仅将“SO”作为输出而不是整个文本?即只有实际令牌(原始输入中存在的令牌)作为输出? 另一个例子:如果我搜索说“积极”,我应该得到“着名”作为输出,而不是整个“SO是着名的”。
我知道如果我把它作为文档中的字段,我应该能够得到它,但是如何添加这样的字段?因为,只有当令牌通过过滤器时,我们才会知道所有属性将附加到它上面,所以当我们执行indexwriter.addDocument()时,我们不知道属性。
我看到的典型问题是索引是基于新的令牌流完成的,但是当它检索Document时,文档具有较旧的实际令牌流(或实际输入),这就是输出的内容。
帮助/评论赞赏
答案 0 :(得分:0)
听起来你应该使用荧光笔?
现在Lucene有三个,但我会从最新的PostingsHighlighter开始。我在这里写了一篇文章:http://blog.mikemccandless.com/2012/12/a-new-lucene-highlighter-is-born.html
荧光笔识别字段文本的哪个部分与查询中的哪些字符匹配。