Небольшое изменение вашего кода
index = list(df.index[df['Name'] == 'Bob'])
должно дать вам позицию. Дайте мне знать, если это работает
Это зависит от вашей модели безопасности. Если разрешения просты - скажем, у вас есть три класса документов - вероятно, лучше создать отдельный индекс Lucene для каждого класса и объединить результаты, когда пользователь сможет увидеть более одного класса. Вики Solr по безопасности предлагает нечто похожее на предложение HakonB - добавление учетных данных пользователя в запрос и поиск по ним. См. Также это обсуждение в группе пользователей Lucene . Другая стратегия будет заключаться в том, чтобы обернуть поиск Lucene отдельным классом безопасности, который выполняет дополнительную фильтрацию из Lucene. Это может быть быстрее, если вы можете сделать это, используя базу данных для разрешений.
Редактировать: Я вижу, у вас довольно сложная система разрешений. Ваш основной выбор дизайна заключается в том, внедрять ли его в Lucene или вне Lucene. Мой совет - использовать Lucene в качестве поисковой системы (ее основное преимущество) и использовать другую систему / приложение для безопасности. Если вы все равно решите использовать Lucene для обеспечения безопасности, я предлагаю вам хорошо изучить Lucene Filters и использовать фильтр битовых наборов для фильтрации результатов запроса. У него есть проблемы, которые вы перечислили, из-за необходимости обновлять разрешения.
Это зависит от количества различных групп безопасности, которые имеют отношение к вашему контексту, и от того, как защита применяется к вашим проиндексированным данным.
У нас была похожая проблема, которую мы решили следующим образом: при индексации мы добавляли в документ разрешенные группы, а при поиске добавляли логический запрос с группами, в которые входил пользователь. Это хорошо сработало в нашем сценарии.