Как я могу получить DocId при добавлении документа в индекс Lucene? - PullRequest
5 голосов
/ 11 марта 2010

Я индексирую ряд данных из базы данных в Lucene.Net. Строка эквивалентна Document.

Я хочу обновить свою базу данных с помощью DocId, чтобы я мог использовать DocId в результатах, чтобы иметь возможность быстро извлекать строки.

В настоящее время я сначала извлекаю PK из результирующих документов, что, по моему мнению, должно быть медленнее, чем извлечение непосредственно из базы данных с использованием DocId.

Как мне найти DocId при добавлении документа в Lucene?

Ответы [ 2 ]

3 голосов
/ 12 марта 2010

Полагаться на DocId Люсена - плохая политика, так как даже Люсен пытается избежать этого. Я предлагаю вам создать свой собственный DocId. В базе данных я бы использовал поле автоинкремента . Если ваше приложение не использует реляционную базу данных, вы можете создать этот тип поля программно. Кроме этого, я предлагаю вам прочитать Поисковая система и СУБД - я считаю, что в Lucene должны храниться только те поля, которые можно искать; Остальная часть строки принадлежит базе данных, поэтому последовательность событий:

  1. Используя Lucene, найдите текст и получите DocId.
  2. Используйте DocId для получения полной строки из базы данных.
2 голосов
/ 12 марта 2010

Как сказал Ювал, утечка внутренних деталей реализации Lucene - это плохо, особенно с учетом изменения идентификатора документа Lucene при изменении индекса.

Если поиск первичного ключа с использованием doc.get ("pk") слишком медленный для вас, используйте FieldCache для кэширования всех ПК в памяти. Тогда поиск будет достаточно быстрым.

...