0

我正在使用 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 很陌生,我确定所有这些部分都做了什么,或者它们是否都是必要的。我刚刚从网上找到的各种示例中复制了它们。所以如果我做错了什么,请告诉我。谢谢。

4

1 回答 1

0

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

于 2011-11-11T16:37:40.750 回答