【问题标题】:Sitecore + Lucene Search FieldQuery with and empty stringSitecore + Lucene 搜索 FieldQuery 和空字符串
【发布时间】:2012-12-01 21:48:06
【问题描述】:

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

-字段名:

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

非常感谢任何帮助。

谢谢!

【问题讨论】:

    标签: string lucene indexing sitecore field


    【解决方案1】:

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

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

    也就是说,你可以创建

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

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

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

    【讨论】:

    • 谢谢。我决定使用 null 或空白字符串以外的其他值设置默认值,以便我可以使用与应用程序的其余部分相同的 Sitecore FieldQuery 基础架构。感谢您的帮助!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多