0

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

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

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

非常感谢!

4

1 回答 1

0

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

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

  • 存储字段:例如,您可以将颜色集存储为以逗号分隔的颜色名称列表作为字符串。
  • 词向量:如果你用词向量索引颜色字段,那么在搜索时,你可以调用IndexReader.getTermFreqVector(int, String)来获取该文档/字段的词向量信息。生成的 TermFreqVector 对象为您提供该字段中的术语列表(实际上是一组)(即您的情况下的颜色)。
于 2012-07-11T04:30:19.207 回答