Lucene:保持标点时的问题

时间:2015-01-26 09:57:28

标签: lucene full-text-search

我需要Lucene在索引我的文本时保留一些标点符号,所以我现在使用的WhitespaceAnalyzer不会删除符号。

如果文本中有oranges, apples and bananas这样的句子,我希望短语查询"oranges, apples"成为匹配(不是没有逗号),这样就可以了。

但是,我还希望简单查询oranges能够产生匹配,但似乎索引标记也包含逗号(oranges,)所以它不会成为除非我在查询中也写了逗号,这是不可取的。

有没有简单的方法让我的工作方式符合我的需要?

提前致谢。

1 个答案:

答案 0 :(得分:0)

我知道这是一个非常老的问题,但我很无聊,无论如何我都会答复。我看到了两种方法:

  • 创建一个TokenFilter,每当一个单词包含非打孔版本的标点符号时,该enum HerosType { All, Popular } class HerosList extends ChangeNotifier { // var lst = new List(3) --> Fixed List, var lst = [val1,val2,val3] or var lst = new List() --> Growable List final List<HeroClass> _allHeros = [ HeroClass( heroName: 'Juggernaunt', pngName: 'juggernaut', viewNumber: 35, clipPathColor: Color(0xffc43a3d), bottom: 15.0, right: -65.0, height: 210.0, width: 250.0), //Much More HeroClasses ]; HerosType _herosType = HerosType.All; List<HeroClass> _heros; HerosList() { _heros = List.from(_allHeros); } List<HeroClass> get heros => _heros; List<HeroClass> get allHeros => _allHeros; List<HeroClass> get popularHeros => [ for (var heros in _allHeros) if (heros.viewNumber > 10) heros ]; void toggleHeroesType() { //https://github.com/dart-lang/language/blob/master/accepted/2.3/spread-collections/feature-specification.md if (_herosType == HerosType.All) { _herosType = HerosType.Popular; _heros = [ for (var heros in _allHeros) if (heros.viewNumber > 30) heros ]; return notifyListeners(); } else { _herosType = HerosType.All; _heros = List.from(_allHeros); return notifyListeners(); } } } 就会创建一个同义词(例如,将标记插入位置长度为0的流中)。< / li>
  • 添加另一个具有相同内容但使用标准标记器的字段,该标记器会删除所有标点符号。两个字段都将匹配。