Sitecore + Lucene使用和空字符串搜索FieldQuery

Mar*_*gun 4 string lucene indexing field sitecore

我正在使用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时,它看起来像这样:

-FieldName:

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

任何帮助是极大的赞赏.

谢谢!

fem*_*gon 6

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

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

也就是说,你可以创造

new RangeQuery(FieldName, null, null, true, true);
Run Code Online (Sandbox Code Playgroud)

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

这不是一个很好的方法,但也没有只是否定的质疑.