Lucene.NET - Найти документы, которые не содержат указанное поле - PullRequest
3 голосов
/ 28 апреля 2010

Допустим, у меня есть 2 экземпляра класса 'Animal'.

Животное имеет 3 поля: Имя, Возраст и Тип

Поле имени имеет значение NULL, поэтому перед тем, как вставить экземпляр Animal в качестве индексированного документа Lucene, я проверяю, есть ли Animal.Name == null, и если это так, я не вставляю его в качестве поля в своем документе. Если бы мне нужно было извлечь всех животных, я бы увидел, что поле Имя не существует, и я могу установить его значение на ноль.

Однако могут быть ситуации, когда я хочу сказать: «Приведите ко мне всех животных, у которых пока не указано имя». В этой ситуации я хочу получить все документы Lucene.NET из моего индекса животных, которые не содержат поле Имя.

Есть ли простой способ сделать это с Lucene.NET? Я хочу избежать какого-либо взлома, чтобы проверить, имеет ли мое поле имени значение 'null'.

1 Ответ

5 голосов
/ 28 апреля 2010

Я полагаю, что вы можете сделать это с Solr, но не с Lucene напрямую, поэтому это невозможно с Lucene.Net.

Вот два обходных пути, которые не так уж и плохи:

  1. Для элементов со значением NULL в поле добавьте пользовательская строка типа __NULL__ или аналогичная вместо пропуска поля. Это будет для поиска.
  2. Для элементов со значением NULL в поле добавьте поле, которое не будет присутствовать в элементах со значением. Например. EMPTY_FIELD = "no". Это можно использовать в фильтре.

Надеюсь, это немного поможет вам в пути.

...