【问题标题】:Lucene Highlighter Isn't Match PrefixesLucene 荧光笔不匹配前缀
【发布时间】:2011-11-20 04:15:36
【问题描述】:

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

【问题讨论】:

    标签: java lucene lucene-highlighter


    【解决方案1】:

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

    【讨论】:

    • 是的,我没有索引。这就是我在整个应用程序中获得的所有 Lucene 代码。因此,一旦我在 pText 中找到该单词的所有位置位置,我究竟会调用什么来使用该信息更新我的 Query 对象?
    • 您不需要位置/位置,只需找到单词,添加到列表/数组中,然后创建一个类似field:abc1 field:abc2 field:abc3 的查询字符串并将其提供给查询解析器。
    猜你喜欢
    • 1970-01-01
    • 2011-06-01
    • 2015-02-24
    • 2011-03-01
    • 1970-01-01
    • 2011-01-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多