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

时间:2015-03-11 13:30:50

标签: java lucene

我需要在Lucene-Java中的两个或多个字段的组合中找到唯一字词的编号(或列表)。我正在为Java使用Lucene 4.1.0个库。我检查了thisthis等问题,但他们讨论了从单个(特定)字段或所有查找唯一字词列表字段(没有子集)。

例如,我对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。

非常感谢任何帮助。

谢谢!

1 个答案:

答案 0 :(得分:1)

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

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

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

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