排除在特定字段元素中编入索引的所有文档,这些元素不属于给定集合

时间:2012-07-10 22:09:28

标签: lucene.net lucene

在我的Lucene搜索中,我想排除在特定字段元素中索引的所有文档,这些元素不属于给定集合。

例如,假设我的文档代表一幅图。并有一个色域。在颜色字段中,我索引图形中使用的所有颜色。现在说我可以说五种颜色。红色,蓝色,绿色,紫色和棕色。我想只检索使用这些颜色的图纸,并且应排除任何颜色不是上述颜色的图纸。如果我想要使用所有这些颜色的所有图形而不是所有这些颜色,我可以在文档中为“颜色数量”添加一个新字段,然后通过为每种颜色添加MUST术语查询来构建我的布尔查询。添加一个必须的布尔查询,其中count作为颜色数。但是我想要检索所有具有上述5种颜色组合的文档。因此,也可以检索完全用棕色完成的绘图。

请注意我有数千种颜色。因此,为每种颜色创建一个字段,然后为除了我的5种颜色以外的所有人做MUST_NOT也不是一种选择。

非常感谢!

1 个答案:

答案 0 :(得分:0)

我认为没有内置的方法可以做到这一点。相反,您希望在某处存储颜色集(特定图形包含的颜色)。然后,当您在搜索时浏览每个搜索结果时,加载颜色集,检查它是否包含任何“其他”颜色,并相应地过滤结果。

某处可以是至少两个地方中的任何一个:

  • 存储字段:例如,您可以将颜色集存储为逗号分隔的颜色名称列表作为字符串。
  • 术语向量:如果使用术语向量索引颜色字段,则在搜索时,您可以调用IndexReader.getTermFreqVector(int, String)来获取该文档/字段的术语向量信息。生成的TermFreqVector对象为您提供该字段中的术语列表(实际上是一组)(即您的案例中的颜色)。