string - Sitecore + Lucene 搜索 FieldQuery 带空字符串

标签 string lucene indexing sitecore field

我正在使用 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/

相关文章:

python - 如何使用索引更新张量的元素?

c++ - Eclipse Juno Indexer Broken - 找不到任何 STL header

javascript - 奇怪的 Javascript 字符串错误

multithreading - 同时搜索多个来源的最佳方法是什么?

aem - 了解CQ5 Lucene索引规则

java - 由 : java. lang.NoClassDefFoundError : Could not initialize class org. elasticsearch.common.lucene.Lucene 引起

Java 字符串与 StringBuilder

java - 用于查找嵌套代码块的正则表达式

java - 如何修复 Java 回文程序中的错误?

mysql - 用于存储条形码和在其中搜索的最佳 mysql 数据类型