在多个字段中查找唯一术语的数量

Finding number of unique terms over multiple fields

我需要在 Lucene-Java 中的两个或多个字段 的组合中查找唯一术语的数量(或列表)。我正在为 Lucene 4.1.0 使用 Java 库。我检查了诸如 this and this 之类的问题,但他们讨论了从 单个 (特定)字段或 所有 中查找唯一术语列表字段(无子集)。

例如,我对 number(unique(height, gender)) 而不是 number(unique(height))number(unique(gender)) 感兴趣。

给定数据:

height,gender
1,M
2,F
3,M
3,F
4,M
4,F

number(unique(height)) 是 4,number(unique(gender)) 是 2,number(unique(gender,height)) 是 6。

任何帮助将不胜感激。

谢谢!

如果您预定义了多个字段,那么最简单和最快的(在搜索术语中)是索引一个组合字段,即 heightGender (1.23:male)。然后您可以只计算该字段中的唯一术语,但这在搜索时没有任何灵活性。

更灵活的方法是使用构面 (https://lucene.apache.org/core/4_1_0/facet/index.html)。然后,您将查询一个字段的每个值(例如性别(male/female))并检索另一个字段的所有值(和文档计数)。

但是,如果您无法更改索引编制过程,那么您只能使用布尔查询进行强力搜索,以查找索引中包含您的字段值的所有组合的文档数感兴趣。我假设您只计算文档数量非零的组合。

值得注意的是,这个问题正是Solr Pivot Facets要解决的问题(http://lucidworks.com/blog/pivot-facets-inside-and-out/)