我正在使用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很新,我很确定所有这些作品是做什么的,或者它们是否都是必要的。我刚从网上找到的各种例子中复制了它们。因此,如果我做了其他任何错误,请告诉我。感谢。
答案 0 :(得分:0)
假设您有一个查询field:abc*
。 query.rewrite
基本上做的是:它读取索引(这就是你需要一个IndexReader的原因)找到所有以abc
开头的术语,并将你的查询更改为,例如, field:abc1 field:abc2 field:abc3
。如果您知道索引的位置,则可以使用IndexReader.Open
来获取IndexReader。如果您根本没有索引,则应搜索pText
,找到所有以abc
开头的字词并相应地更新您的查询。