在Lucene中,我使用SnowballAnalyzer进行索引和搜索。
当我构建索引时,我会对我的索引进行查询。例如,我为字段“body”做了一个“专用”查询。IndexSearcher返回包含“专门化、专门化等”的文档因为SnowballAnalyzer所做的堵塞。
现在-拥有顶级文档-我想从body字段中获得一个文本片段。这个片段应该包含查询词的词干版本。
例如,退回的一份文件中有“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 q = queryParser.parse("some text to be parsed"); String parsedQuery = q.toString();` 有一个查询对象toString(字符串fieldName)的方法;
发布于 2010-11-21 09:33:55
我相信你混淆了几个问题。首先,要查看查询的词干版本和其他有用的信息,可以使用IndexSearcher的explain()方法。请看我对这个问题的回答。
用于获取代码片段的Lucene解决方案是荧光笔。另一个选项是FastVectorHighlighter。我相信您可以定制这两个词,以获得词干术语,而不是完整的术语。
https://stackoverflow.com/questions/4235099
复制相似问题