【发布时间】:2010-09-14 14:54:36
【问题描述】:
我想在索引中查找具有特定字段的所有文档,而不管该字段的值。尽可能使用查询语言,而不是 API。
有办法吗?
【问题讨论】:
标签: lucene
我想在索引中查找具有特定字段的所有文档,而不管该字段的值。尽可能使用查询语言,而不是 API。
有办法吗?
【问题讨论】:
标签: lucene
另一种解决方案是使用带有 FieldValueFilter 的 ConstantScoreQuery
new ConstantScoreQuery(new FieldValueFilter("field"))
【讨论】:
如果您知道字段中存储的数据类型,可以尝试范围查询。例如,如果您的字段包含字符串数据,则像 field:[a* TO z*] 这样的查询将返回该字段中有字符串值的所有文档。
【讨论】:
QueryParser 上启用SetAllowLeadingWildcard。
我做了一些实验,似乎最简单的方法是创建一个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() 中仅搜索"*"。
我不能保证这种方法相对于其他方法的效率如何,但作为我能找到的最简单的方法,我希望它至少与 field:[* TO *] 一样有效,并且它避免了像 @ 这样的黑客行为987654330@,可能无法考虑所有可能的值,例如以非字母数字字符开头的值。
【讨论】: