4

我正在使用 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 查询中创建和使用的 Term 时,它看起来像这样:

-字段名称:

我认为这是不正确的......但也许它是正确的,我只是没有正确的字段索引设置......我不确定是否诚实。

任何帮助是极大的赞赏。

谢谢!

4

1 回答 1

6

Lucene 并不真正支持搜索空值/空值。毕竟,它没有任何索引可以找到。Lucene 使用倒排索引,这使得某些类型的查询(包括纯否定查询和空值搜索)变得困难甚至不可能。

如果您需要搜索某些字段为空的文档,您应该在可以搜索的字段中存储一个默认值(例如“NULL”)。

也就是说,您可以创建

new RangeQuery(FieldName, null, null, true, true);

它构造了一个具有开放上限和下限的范围查询,因此它匹配任何具有值的内容。

这不是一个好方法,但也不是只用否定进行查询。

于 2012-12-13T22:55:22.993 回答