我正在使用 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 程序集进行了反映,但没有发现任何明显的问题。但是,当我查看 Lucene 查询中创建和使用的术语时,它看起来像这样:
-字段名称:
我认为这是不正确的...但也许它是正确的,我只是没有正确的字段索引设置...我不确定说实话。
任何帮助是极大的赞赏。
Thanks!
Lucene 并不真正支持搜索 null/空值。毕竟,没有任何索引可供它查找。 Lucene 使用一个倒排索引 http://en.wikipedia.org/wiki/Inverted_index,这使得某些类型的查询(包括纯否定查询和搜索空值)变得困难甚至不可能。
如果您需要搜索某些字段为空的文档,则应在可以搜索的字段中存储默认值(例如“NULL”)。
也就是说,你可以创建
new RangeQuery(FieldName, null, null, true, true);
它构造了一个具有开放上限和下限的范围查询,因此它匹配任何具有值的内容。
这不是一个好方法,但仅使用否定查询也不是。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)