问题是我实际上只需要突出显示的单词的位置(因此它们的开始和结束偏移量),而不是突出显示的片段。我原来的解决方案(但在Java中)与这里的解决方案非常相似,他们使用令牌流对每个令牌进行评分:https://stackoverflow.com/a/39185606/3543214
然而,正如对该解决方案的评论所暗示的那样,我真正需要的是找到一种方法,使其不仅适用于单个代币。我现在遇到的问题是,如果我的查询是搜索“牛跳”,即使它们没有在一起,我也会得到“牛”和“跳”的点击。有什么想法吗?
如果您的问题是您实际上不希望有点击,请修复您的查询。看起来您需要在这里使用 PhraseQuery 这样您将只获得完全匹配。
为什么你们(我还检查了您引用的帖子)试图用 lucene 解决您的问题,而您只需要编写一些简单的纯 java 函数来将原始搜索字符串作为输入并找到其上的命中???像这样简单的事情就可以工作,不需要深入研究 lucene 世界:
public HighlightDetails getHighlightDetails(String rawQuery, String hitTerm){ HighlightDetails result = new HighlightDetails(); int startIndex = rawQuery.indexOf(hitTerm); result.Match = hitTerm; result.StartIndex = startIndex; result.EndIndex = startIndex + hitTerm.length; return result; }