我需要在Lucene-Java
中的两个或多个字段的组合中找到唯一字词的编号(或列表)。我正在为Java
使用Lucene 4.1.0
个库。我检查了this和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。
非常感谢任何帮助。
谢谢!
答案 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/)