Lucene荧光笔不是匹配前缀

时间:2011-11-11 15:57:58

标签: java lucene lucene-highlighter

我正在使用Lucene的荧光笔突出显示部分字符串。下面的代码似乎可以很好地找到词干但不能用于前缀匹配。

EnglishAnalyzer analyzer = new EnglishAnalyzer(Version.LUCENE_34);
QueryParser parser = new QueryParser(Version.LUCENE_30, "", analyzer);
Query query = parser.parse(pQuery);

QueryScorer scorer = new QueryScorer(query);
Fragmenter fragmenter = new SimpleSpanFragmenter(scorer, 40);

Highlighter highlighter = new Highlighter(scorer);
highlighter.setTextFragmenter(fragmenter);

String[] frags = highlighter.getBestFragments(analyzer, "", pText, 4);

我在几个不同的地方读过,我需要调用Query.rewrite来获得前缀匹配才能工作。该方法虽然采用了IndexReader争论,但我不确定如何获得它。我发现调用Query.rewreite的所有示例都没有显示IndexReader的来源。我将补充说,这是我正在使用的唯一Lucene代码。我没有使用Lucene进行搜索,只是为了突出显示。

如何创建一个IndexReader,如果我按照我的方式使用Lucene,是否可以创建一个。或者也许有一种不同的方式来突出前缀匹配?我对Lucene很新,我很确定所有这些作品是做什么的,或者它们是否都是必要的。我刚从网上找到的各种例子中复制了它们。因此,如果我做了其他任何错误,请告诉我。感谢。

1 个答案:

答案 0 :(得分:0)

假设您有一个查询field:abc*query.rewrite基本上做的是:它读取索引(这就是你需要一个IndexReader的原因)找到所有以abc开头的术语,并将你的查询更改为,例如, field:abc1 field:abc2 field:abc3。如果您知道索引的位置,则可以使用IndexReader.Open来获取IndexReader。如果您根本没有索引,则应搜索pText,找到所有以abc开头的字词并相应地更新您的查询。