0

我是 Lucene 的新手。

我已经实现了分析器和一些过滤器。原始标记流被修改,属性作为标记插入,PositionIncrementAttrbute 为 0。

例如:句子:“SO is Famous” 在通过自定义分析器和少量过滤器并将属性附加到标记后,我们得到的新 Tokenstream 是“SO Noun SocialSite Famous JJ Positive”我基本上是在这里尝试标记每个单词。SO既是名词又是SocialSite,着名的是形容词(JJ)并且是积极的词等。

现在,这绝对可以根据属性进行搜索(这里:名词、SocialSite、JJ、肯定)。即,我可以搜索“名词”或说“肯定”,但仍然可以得到“SO is Famous”作为输出。

但是,由于我在添加文档时将整个文本“SO is Famous”作为一个字段,所以当我搜索“SocialSite”时,我得到一个文档作为输出,其中“SO is Famous”作为字段之一.

但是,是否有可能只获得“SO”作为输出而不是整个文本?即只有实际的标记(原始输入中存在的标记)作为输出?另一个例子:如果我搜索说“肯定”,我应该得到“著名”作为输出,而不是整个“SO 很有名”。

我知道如果我把它作为一个Field放在文档中,我应该可以得到它,但是我如何添加这样一个Field呢?因为,只有当令牌通过过滤器时,我们才能知道所有属性将附加到它,所以当我们执行 indexwriter.addDocument() 时,我们不知道属性。

我看到的典型问题是索引是基于新的令牌流完成的,这很好,但是当它检索文档时,文档具有较旧的实际令牌流(或实际输入),这就是作为输出给出的。

帮助/评论赞赏

4

1 回答 1

0

听起来你应该使用荧光笔?

Lucene 现在有三个,但我将从最新的 PostingsHighlighter 开始。我在这里写了一篇:http: //blog.mikemccandless.com/2012/12/a-new-lucene-highlighter-is-born.html

Highlighter 标识字段文本的哪个部分与查询中的哪些术语匹配。

于 2013-05-30T10:47:00.890 回答