我正在使用 FieldQuery 对象创建 Sitecore.Ecommerce.Search.Query。然后,我使用 LuceneQueryBuilder 类将 Sitecore 查询转换为 Lucene.Net.Search.Query。除了我试图在空字符串上匹配的字段之外,查询的所有内容都工作正常。
所以...这有效:
new FieldQuery(FieldName, "1", MatchVariant.NotEquals)
但这并不:
new FieldQuery(FieldName, string.Empty, MatchVariant.NotEquals)
我也通过 Sitecore.Ecommerce 程序集和 Lucene.Net 程序集进行了反射(reflect),但没有发现任何明显的问题。但是,当我查看在 Lucene 查询中创建和使用的术语时,它看起来像这样:
-字段名称:
我认为这是不正确的...但也许它是正确的,我只是没有正确的字段索引设置...我不确定是否诚实。
非常感谢任何帮助。
谢谢!
最佳答案
Lucene 并不真正支持搜索 null/空值。毕竟,没有任何索引可供它查找。 Lucene 使用 inverted index ,这使得某些类型的查询(包括纯否定查询和搜索空值)变得困难甚至不可能。
如果您需要搜索某些字段为空的文档,您应该在可以搜索的字段中存储一个默认值(例如“NULL”)。
也就是说,你可以创建
new RangeQuery(FieldName, null, null, true, true);
它构建了一个具有开放上限和下限的范围查询,因此它匹配任何具有值的内容。
这不是一个好方法,但仅使用否定进行查询也不是。
关于string - Sitecore + Lucene 搜索 FieldQuery 带空字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13869427/