最初,我认为setMaxDocCharsToAnalyze(int)
会增加输出长度,但事实并非如此。
目前,我的搜索(String fragment
)生成的输出小于一行,因此无法作为预览。
getBestFragment()
生成的输出是否可以通过某种机制增加到至少1个句子或更多(如果它是一个半句或更多,则无关紧要,但我需要它很长足以至少使一些感觉到)。
Document document = new Document();
document.add(new TextField(FIELD_CONTENT, content, Field.Store.YES));
document.add(new StringField(FIELD_PATH, path, Field.Store.YES));
indexWriter.addDocument(document);
QueryParser queryParser = new QueryParser(FIELD_CONTENT, new StandardAnalyzer());
Query query = queryParser.parse(searchQuery);
QueryScorer queryScorer = new QueryScorer(query, FIELD_CONTENT);
Fragmenter fragmenter = new SimpleSpanFragmenter(queryScorer);
Highlighter highlighter = new Highlighter(queryScorer); // Set the best scorer fragments
highlighter.setMaxDocCharsToAnalyze(100000); //"HAS NO EFFECT"
highlighter.setTextFragmenter(fragmenter);
// STEP B
File indexFile = new File(INDEX_DIRECTORY);
Directory directory = FSDirectory.open(indexFile.toPath());
IndexReader indexReader = DirectoryReader.open(directory);
// STEP C
System.out.println("query: " + query);
ScoreDoc scoreDocs[] = searcher.search(query, MAX_DOC).scoreDocs;
for (ScoreDoc scoreDoc : scoreDocs)
{
//System.out.println("1");
Document document = searcher.getDocument(scoreDoc.doc);
String title = document.get(FIELD_CONTENT);
TokenStream tokenStream = TokenSources.getAnyTokenStream(indexReader,
scoreDoc.doc, FIELD_CONTENT, document, new StandardAnalyzer());
String fragment = highlighter.getBestFragment(tokenStream, title); //Increase the length of the this String this is the output
System.out.println(fragment + "-------");
}
查询:+内容:加拿大+内容:部长
| [自由]] [[部长 加拿大 | Prime 部长]] [[Pierre Trudeau]]领导[[少数民族---] ----
。渥太华国家战争服务部的Thorson,部长。 加拿大印刷描述:英国狮子-------
[新西兰工党]的政治家工党]]和内阁部长。他代表-------
|}}} | ! [[财务部长(加拿大)| 部长]] {{!}} {{{部长 - ------
,富兰克林区&#39;。渥太华:供应和服务部长 加拿大,1977年。国际标准书号0660008351 25]],[[1880]] - [[3月4日]],[[1975]])是[[加拿大 |加拿大]]省和联邦------- <登记/> -du-Quebec]]地区,[[加拿大]]。它以第一位法国加拿大人的名字命名为Prime----- 11569347,Cannon_family _(加拿大)::: {{for |美国政治家庭| Cannon家族-------
[[圭亚那]的部长和[[圭亚那]]的着名印度教政治家。他还在不同的时间服务------- 11559743,Mohammed_Hussein_Al_Shaali :::&#39;&#39;&#39; Mohammed Hussein Al Shaali&#39;&#39;&#39;是部长 -------
答案 0 :(得分:4)
Fragmenter
是控制此行为的部分。您可以将int
传递给SimpleSpanFragmenter
构造函数来控制它生成的片段的大小(以字节为单位)。默认大小为100.例如,要加倍:
Fragmenter fragmenter = new SimpleSpanFragmenter(queryScorer, 200);
就分裂句子边界而言,没有开箱即用的碎片。有人张贴了他们的implementation of one here。这是一个非常天真的实现,但是如果你想要去那个特定的兔子洞,你会发现它很有帮助。