Lucene.NET - 查找不包含指定字段的文档

Bra*_*don 3 c# lucene indexing lucene.net

假设我有一个名为'Animal'的类的2个实例.

Animal有3个字段:Name,Age和Type

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

但是,在某些情况下我可能会说"让我找到所有尚未指定名称的动物".在这种情况下,我想从我的动物索引中检索不包含Name字段的所有Lucene.NET文档.

使用Lucene.NET有一个简单的方法吗?我想远离不必执行某种黑客来检查我的名字字段是否具有值'null'.

Mik*_*son 5

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

这里有两个解决方法,它们并没有那么糟糕:

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

希望这对你有所帮助.