在 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();
有一个方法;