2

在 Lucene 中,我使用 SnowballAnalyzer 进行索引和搜索。

当我建立索引时,我对我的索引进行查询。例如,我对字段“body”进行了“specialized”查询。IndexSearcher 返回包​​含“specialize、specialized 等”的文档。因为 SnowballAnalyzer 进行了词干提取。

现在 - 拥有顶级文档 - 我想从正文字段中获取文本片段。此片段应包含查询词的词干版本。
例如,其中一份退回的文件有 body 字段:“不幸的是,在某些州,盲人只能使用一般康复机构,这些机构为各种残疾的人提供服务。在这些情况下,为视障人士提供的专门服务是不适用的。”始终可用。” 然后我希望得到部分'在这些情况下,视觉的专业服务'作为片段。此外,我想从这个片段中获得条款。可以执行此操作的代码,但带有一个标记为“?” 字符,我有一个问题是:

我想怎么做 IndexReader ir = IndexReader.open(fsDir);
TermPositionVector tv = (TermPositionVector)ir.getTermFreqVector(hits.scoreDocs[i].doc, "body");

? - 这里:查询 - 查询必须是术语。因此,如果真正的查询是“专门的”,那么查询应该是专门的,通常雪球分析器会这样做。我怎样才能得到分析器为单个单词或短语分析的术语,因为查询可以包含一个短语:“专业机器”。

int idx = tv.indexOf(query);
int [] idxs = tv.getTermPositions(idx);
for(String t : tv.getTerms()){
int iidx = tv.indexOf(t);
int [] iidxs = tv.getTermPositions(iidx);
for(int ni : idxs){
tmpValue = 0.0f;
for(int nni : iidxs){
if(Math.abs(nni-ni)<= Settings.termWindowSize){

编辑
我找到了获取词干的方法: Query object toString(String fieldName)
Query q = queryParser.parse("some text to be parsed"); String parsedQuery = q.toString();
有一个方法;

4

1 回答 1

0

我相信你混合了几个问题。首先,要查看查询的词干版本和其他有用信息,可以使用 IndexSearcher 的 explain() 方法。请看我对这个问题的回答

用于获取片段的 Lucene 解决方案是Highlighter。另一种选择是FastVectorHighlighter。我相信您可以自定义两者以获得词干而不是完整的词。

于 2010-11-21T09:33:55.573 回答