【问题标题】:How to sort by Lucene.Net field and ignore common stop words such as 'a' and 'the'?如何按 Lucene.Net 字段排序并忽略“a”和“the”等常见停用词?
【发布时间】:2010-09-09 03:00:17
【问题描述】:

我发现了如何按 Lucene.Net 索引中的给定字段而不是按分数对查询结果进行排序;所需要的只是一个已编入索引但未标记化的字段。但是,我无法弄清楚的是如何在忽略“a”和“the”等停用词的情况下对该字段进行排序,以便例如以下书名按升序排序:

  1. 戴帽子的猫
  2. 霍顿听到了谁

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

我正在使用 Lucene.Net 2.3.1.2。

【问题讨论】:

    标签: lucene lucene.net


    【解决方案1】:

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

    【讨论】:

    • 我认为必须这样做,是的。我确实使用 Lucene 结果创建了一个自定义对象的集合,所以它应该不会太难。谢谢。
    【解决方案2】:

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

    【讨论】:

    • 嗯,这就是诀窍,不是吗?据我了解,您不能按标记化字段进行排序,并且它是分析停用词和标点符号字段的标记化。那么如何去除这些停用词但保持字段未标记?
    • 在您的代码中,去掉停用词。您必须维护自己的列表。
    【解决方案3】:

    自从我使用 Lucene 以来已经有一段时间了,但我的猜测是添加一个额外的字段来排序和存储其中的值,并且已经去除了停用词。您可能可以使用相同的分析器来生成此值。

    【讨论】:

      【解决方案4】:

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

      【讨论】:

      • 不要依赖 Lucene 来剥离它们,自己动手吧。
      【解决方案5】:

      对于搜索,我发现search lucene .net index with sort option 链接很有趣,可以解决您的问题

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-03-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-07-14
        • 2013-02-11
        • 1970-01-01
        相关资源
        最近更新 更多