关于 apache lucene 提供的命中荧光笔,我有两个问题:
看到这个函数你能解释一下令牌流参数的使用吗?
我有几个包含许多字段的大型 lucene 文档,每个字段中都有一些字符串。现在我找到了与特定查询最相关的文档。现在找到了这个文档,因为查询中的几个单词可能与文档中的单词匹配。我想找出查询中的哪些单词导致了这种情况。所以为此我打算使用 Lucene Hit Highlighter。示例:如果查询是“skin doctor delhi”并且标题为“dermatologist”的文档包含“skin”和“doctor”这两个词,那么在点击突出显示后,我应该能够从查询中分离出“skin”和“doctor”。几个星期以来,我一直在尝试为此编写代码。无法得到我想要的。请问你能帮帮我吗?
提前致谢。
更新:
当前方法:我创建一个包含文档中所有单词的查询。
Field[] field = doc.getFields("description");
String desc = "";
for (int j = 0; j < field.length; ++j) {
desc += field[j].stringValue() + " ";
}
Query q = qp.parse(desc);
QueryScorer scorer = new QueryScorer(q, reader, "description");
Highlighter highlighter = new Highlighter(scorer);
String fragment = highlighter.getBestFragment(analyzer, "description", text);
它适用于小文档,但不适用于大文档。获得以下堆栈跟踪。
org.apache.lucene.search.BooleanQuery$TooManyClauses: maxClauseCount is set to 1024
at org.apache.lucene.search.BooleanQuery.add(BooleanQuery.java:152)
at org.apache.lucene.queryParser.QueryParser.getBooleanQuery(QueryParser.java:891)
at org.apache.lucene.queryParser.QueryParser.getBooleanQuery(QueryParser.java:866)
at org.apache.lucene.queryParser.QueryParser.Query(QueryParser.java:1213)
at org.apache.lucene.queryParser.QueryParser.TopLevelQuery(QueryParser.java:1167)
at org.apache.lucene.queryParser.QueryParser.parse(QueryParser.java:182)
很明显,这种方法对于大文档是不合理的。应该做些什么来纠正这个问题?
顺便说一句,我正在使用 FuzzyQuery 匹配。