在Lucene中,我使用SnowballAnalyzer进行索引和搜索。
当我构建索引时,我会对索引进行查询。例如,我为字段“body”进行了“专门化”查询。 IndexSearcher返回包含'specialize,specialized等'的文档。因为SnowballAnalyzer完成了干扰。
现在 - 拥有热门文档 - 我想从正文字段中获取文本片段。此剪辑应包含查询词的词干版本 例如,其中一份归还的文件具有身体字段:“不幸的是,在某些州,盲人只能使用一般康复机构,这些机构为有各种残疾的人提供服务。在这些情况下,为视障人士提供的专门服务不是始终可用。” 然后我希望得到“在这些情况下,视觉专业服务”这一部分作为片段。 另外,我希望从此代码段获得条款。代码将执行此操作,但标记为'?'字符,我有一个问题是:
我想怎么做才是
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();
Query对象toString(String fieldName);
答案 0 :(得分:0)
我相信你在混合几个问题。 首先,要查看查询的词干版本以及其他有用信息,可以使用IndexSearcher的explain()方法。请参阅my answer to this question。
用于获取代码段的Lucene解决方案是Highlighter。另一种选择是FastVectorHighlighter。我相信你可以自定义两者来获得词干而不是完整词。