我想在索引中找到具有特定字段的所有文档,而不管字段的值如何。如果可能的话,使用查询语言,而不是API。
有办法吗?
答案 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"))