2010-04-28 92 views
3

假设我有一个名为'Animal'的类的2个实例。Lucene.NET - 查找不包含指定字段的文档

动物有3个字​​段:姓名,年龄,和类型

name字段为空,所以之前我插入动物的实例作为一个Lucene索引的文档,我是否Animal.Name == NULL,和如果是这样,我不会将其作为字段插入到我的文档中。如果我要检索所有动物,我会看到Name字段不存在,我可以将其值设置为null。

但是,有些情况下我想说“给我所有没有指定名称的动物”。在这种情况下,我想从我的动物索引中检索不包含名称字段的所有Lucene.NET文档。

有没有一种简单的方法来与Lucene.NET做到这一点?我想远离必须执行某种破解来检查我的名称字段是否具有'null'值。

回答

5

我相信你可以用Solr来做到这一点,但不能直接与Lucene做到这一点,所以在Lucene.Net中是不可能的。

这里有两种解决办法,这是不那么糟糕:

  1. 对于在该领域的NULL值的项目,加 自定义字符串像__NULL__或相似的,而不是忽略的领域。这将是可搜索的。
  2. 对于字段中具有空值的项目,添加一个字段,该字段不会出现在具有值的项目上。例如。 EMPTY_FIELD = "no"。这可以用在过滤器中。

希望这可以帮助你一点点的方式。

+0

只需使用保留关键字执行破解操作即可使用您的解决方案。现在我只需要弄清楚为什么我执行搜索时特殊字符处理不当。 我创建了另一篇文章,以找出为什么我得到特殊字符这种奇怪的行为。 http://stackoverflow.com/questions/2732987/lucene-and-special-characters – Brandon 2010-04-28 20:41:48

相关问题