如何按Lucene.Net字段排序并忽略常见的停用词,例如" a"和" the"?

时间:2020-03-05 18:54:20  来源:igfitidea点击:

我发现了如何通过Lucene.Net索引中的给定字段而不是分数来对查询结果进行排序;它所需要的只是一个已索引但未标记化的字段。但是,我仍无法弄清如何在不考虑停用词(例如" a"和" the")的情况下对该字段进行排序,例如,以下书名将以这种升序排列:

  • 帽子里的猫
  • 霍顿听到了谁

这样的事情有可能吗,如果可以,怎么办?

我正在使用Lucene.Net 2.3.1.2.

解决方案

回答

创建索引时,创建一个仅包含希望排序的单词的字段,然后在检索时对该字段进行排序,但显示完整标题。

回答

自从我使用Lucene以来已经有一段时间了,但是我的猜测是添加一个额外的字段,用于在其中已经删除了停用词的情况下对值进行排序和存储。我们可能可以使用相同的分析器来生成该值。

回答

似乎有一个陷阱22,我们必须使用分析器对字段进行标记以删除标点符号和停用词,但是我们不能对标记化的字段进行排序。那么如何在不标记的情况下去除停用词呢?

回答

我将Lucene返回的结果包装到我自己的自定义对象集合中。然后,我可以使用额外的信息/上下文信息填充它(并使用荧光笔类之类的内容来提取匹配的摘录),并添加分页。如果我们采用类似的方法,则可以创建一个"结果"类/对象,添加类似SortBy属性的内容,然后获取要排序的任何字段,删除任何停用词,然后将其保存在此属性中。现在,只需根据该属性对集合进行排序即可。

回答

对于搜索,我发现带有排序选项链接的搜索lucene .net索引很有趣,可以解决问题