查找具有特定字段的所有Lucene文档

时间:2010-09-14 14:54:37

标签: lucene

我想在索引中找到具有特定字段的所有文档,而不管字段的值如何。如果可能的话,使用查询语言,而不是API。

有办法吗?

3 个答案:

答案 0 :(得分:5)

如果您知道字段中存储的数据类型,则可以尝试范围查询。例如,如果您的字段包含字符串数据,则field:[a* TO z*]之类的查询将返回该字段中存在字符串值的所有文档。

答案 1 :(得分:3)

我做了一些实验,似乎最简单的方法是创建一个QueryParser并调用SetAllowLeadingWildcard( true )并像这样搜索field:*

var qp = new QueryParser( Lucene.Net.Util.Version.LUCENE_29, field, analyzer );
qp.SetAllowLeadingWildcard( true );
var query = qp.Parse( "*" ) );

(注意我在其构造函数中将QueryParser的默认字段设置为field,因此仅在"*"中搜索Parse()。 / em>的

我不能保证这个方法比其他方法更有效,但作为我能找到的最简单的方法,我希望它至少和field:[* TO *]一样有效,并且它避免了必须做hackish事情例如field:[0* TO z*],它可能不会考虑所有可能的值,例如以非字母数字字符开头的值。

答案 2 :(得分:1)

另一个解决方案是使用带有FieldValueFilter的ConstantScoreQuery

new ConstantScoreQuery(new FieldValueFilter("field"))