【发布时间】:2022-04-03 10:51:15
【问题描述】:
我有一个 Lucene 索引设置,我可以很好地查询。我只是无法让“字段不等于空字符串”条件起作用。例如在下面的代码示例中,我想要 3 个条件
- 其中“国家标签”字段包含“{4ED2F7EE-5C2A-418C-B2F6-236F94166BA1}”。
- 其中“国家标签”字段不是空字符串。
-
其中“日期”范围介于“20110101T000000”和“20121001T000000”之间。
WildcardQuery taggingQuery = new WildcardQuery(new Term("country tag", "*" + ShortID.Encode("{4ED2F7EE-5C2A-418C-B2F6-236F94166BA1}").ToLowerInvariant() + "*")); TermQuery taggingNotQuery = new Term("country tag", " ")); RangeQuery rangeQuery = new RangeQuery(new Term("date", "20110101T000000"), new Term("date", "20121001T000000"), true); BooleanQuery booleanQuery = new BooleanQuery(); booleanQuery.Add(taggingQuery, BooleanClause.Occur.MUST); booleanQuery.Add(taggingNotQuery, BooleanClause.Occur.MUST_NOT); booleanQuery.Add(rangeQuery, BooleanClause.Occur.MUST);
我感觉我做错了,或者我的查询在某种程度上是错误的。我不应该需要一个我应该注意空字段或空字段的条件。
感谢任何帮助!
【问题讨论】:
-
你能展示你用来将文档写入没有国家的索引的代码吗?
-
您是否在文档中多次添加国家标签字段?如果不是,那么您不需要 MUST_NOT 子句。顺便说一句,您的 MUST_NOT 检查空格,而不是空字符串。最后,根据您所说,我建议您不要添加带有空字符串的字段,只是不要将该字段添加到您的文档中。
标签: lucene.net