powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Как устроено индексирование в Windows Search?
14 сообщений из 14, страница 1 из 1
Как устроено индексирование в Windows Search?
    #37048334
Winnipuh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А точнее - индексирующий сервис.
У меня задача в чем-то отдаленно напоминает такую же...
Интересно, как он знает, какие файлы надо про- или переиндексирвоать?

Есть набор фолдеров (или весь диск), которые надо проиндексировать.
Пускаем сервис, он работает, все гут.
Но по ходу работы появляются новые файлы, изменяются - ну предположим эти события можно ловить через FileSystemWatcher и доиндексировать..

А если остановить сервис и потом пустить его через какое-то время?
Откуда он знает, с чего начинать, откуда продолжать?
Хранит где-то свою базу с именами уже проиндексированных файлов?
...
Рейтинг: 0 / 0
Как устроено индексирование в Windows Search?
    #37048419
mayton1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
База хранится на локальном диске. Это скрытая директория с файлами в корневом каталоге.

Текстовый индекс MS-Indexing Serv это не аналог индекса в БД и
его состояние не всегда актуально.
...
Рейтинг: 0 / 0
Как устроено индексирование в Windows Search?
    #37048443
Winnipuh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton1База хранится на локальном диске. Это скрытая директория с файлами в корневом каталоге.

Текстовый индекс MS-Indexing Serv это не аналог индекса в БД и
его состояние не всегда актуально.

это да.
А вот алгоритм работы интересует.
Стартонул сервис, он идет по файлам, и видимо пишет информацию о них в свою базу.
Потом я его остановил, стартонул через два дня снова. Что дальше он делает?

Сканирует снова все файлы и сравнивает со своей базой на рпедмет надо ли индексировать.
А если скажем при активном сервисе добавится или изменится много файлов, он не потеряет информацию о том, что изменилось?
...
Рейтинг: 0 / 0
Как устроено индексирование в Windows Search?
    #37048449
Берлuнгер
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Winnipuhmayton1База хранится на локальном диске. Это скрытая директория с файлами в корневом каталоге.

Текстовый индекс MS-Indexing Serv это не аналог индекса в БД и
его состояние не всегда актуально.

это да.
А вот алгоритм работы интересует.
Стартонул сервис, он идет по файлам, и видимо пишет информацию о них в свою базу.
Потом я его остановил, стартонул через два дня снова. Что дальше он делает?

Сканирует снова все файлы и сравнивает со своей базой на рпедмет надо ли индексировать.
А если скажем при активном сервисе добавится или изменится много файлов, он не потеряет информацию о том, что изменилось?

не знаю, чего он там индексирует, но как только я включил индекс, на хп и на семерке поиск перестал искать файлы...
...
Рейтинг: 0 / 0
Как устроено индексирование в Windows Search?
    #37049432
Siemargl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Winnipuh,

-Храни в индексе параметр - дату/время последнего изменения файла.
-В нтфс есть механизм уведомления об изменениях.

Берлuнгер, поиск в висте и выше - просто офигенно удобная вещь. На ХП надо ставить кривоватый апдейт: серчь 4.0
...
Рейтинг: 0 / 0
Как устроено индексирование в Windows Search?
    #37050131
МихаилР
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WinnipuhА вот алгоритм работы интересует.
Я немного с этим вопросом разбирался (но не для WS, а для SharePoint), а с вашей подачи сегодня заглянул снова и как обычно, узнал много нового :)

В общем, основная информация по процессу индексирования лежит вот тут Indexing Process in Windows Search .
В двух словах: WS поддерживает расширяемую модель источников данных (вы можете написать плагин для собственного источника, например, локальной базы знаний, который будет индексироваться WS). По типу обновления все источники делятся на:
с поддержкой уведомлений о изменении - они сами формируют список измененных элементов. Про их работу более подробно описано в статье Notifying the Index of Changes . С ними я не работал так что много не опишу, но там вроде все достаточно прозрачно написано.

без поддержки уведомлений. Для таких источников WS делает периодическое пересканирование и ищет измененные документы и/или директории. Для этого для каждого проиндексированного документа хранится дата его последней модификации. Её WS запрашивает у плагина источника через метод IUrlAccessor::GetLastModified .

Если же вас интересуют способы получения off-line информации об изменениях в файловой системе (т.е. без FileSystemWatcher), то в процессе чтения я для себя нашел ажно 2 таких (но все, похоже, работают только для NTFS):

использование журналов изменения тома. В этих журналах ведутся записи всех изменений, которые происходят в конкртеном томе ФС. Подробнее в Change Journals

использовать процедуру ReadDirectoryChangesW .
Из этих двух я бы внимательнее посмотрел на первый.
...
Рейтинг: 0 / 0
Как устроено индексирование в Windows Search?
    #37050289
Winnipuh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МихаилР,

спасибо за столь полезный ответ!

Думаю Windows Search имеет АПИ, с которым можно работать из приложений, или из T-SQL.
Т.е. так же как и Indexing Service имеет.
...
Рейтинг: 0 / 0
Как устроено индексирование в Windows Search?
    #37050535
Фотография Aklin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SiemarglWinnipuh,

-Храни в индексе параметр - дату/время последнего изменения файла.
-В нтфс есть механизм уведомления об изменениях.

Берлuнгер, поиск в висте и выше - просто офигенно удобная вещь. На ХП надо ставить кривоватый апдейт: серчь 4.0
ставил, после этого собсна и перестало искать...
...
Рейтинг: 0 / 0
Как устроено индексирование в Windows Search?
    #37050673
МихаилР
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WinnipuhДумаю Windows Search имеет АПИ, с которым можно работать из приложений, или из T-SQL.
Да, если вы хотите использовать WS для поиска, то посмотрите на статью Querying the Index Programmatically , а особенно (мне кажется, это наиболее простой вариант) на Using SQL and AQS Approaches to Query the Index .

Единственное, если вам придется писать собственные провайдеры хранилищь, это уже будет не шибко тривиальная задача, хотя и решаемая. А если индексировать придется только локальные файлы - все уже есть.
...
Рейтинг: 0 / 0
Как устроено индексирование в Windows Search?
    #37054506
Winnipuh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МихаилРWinnipuhДумаю Windows Search имеет АПИ, с которым можно работать из приложений, или из T-SQL.
Да, если вы хотите использовать WS для поиска, то посмотрите на статью Querying the Index Programmatically , а особенно (мне кажется, это наиболее простой вариант) на Using SQL and AQS Approaches to Query the Index .

Единственное, если вам придется писать собственные провайдеры хранилищь, это уже будет не шибко тривиальная задача, хотя и решаемая. А если индексировать придется только локальные файлы - все уже есть.

мне надо сркщивать поиск в базе и поиск в файлах, файлы как-то связаны с объектами в базе (мс скл)
сейчас я использую поисковые запросы из t-sql, но это не очень хорошо о производительности. Пытаюсь найти решение, возможно использовать внешний поиск, типа lucene
...
Рейтинг: 0 / 0
Как устроено индексирование в Windows Search?
    #37054766
МихаилР
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Winnipuhмне надо сркщивать поиск в базе и поиск в файлах, файлы как-то связаны с объектами в базе (мс скл)
сейчас я использую поисковые запросы из t-sql, но это не очень хорошо о производительности.

Не до конца понял - поправьте, если что:
- у вас локальное приложение, которое сохраняет что-то в базе и в неких файлах (если не локально, то Windows Search не самое лучшее решение, хотябы потому, что поддерживает только 1 индекс - на машину. Тут лучше смотреть на специализированные поисковые сервера - тот же MS Search Server. Ну или делать свое).
- для поиска вы используете кросс-запросы из T-SQL (которые, как я помню, адресуются в Indexing Services). Т.е. одним запросом поиск и по базе, и по файлам.
В целом логичное решение. Только почему не устраивает скорость... Не думаю, что будет какое-то радикально более быстроее решение.

Или я чего-то недопонял?
...
Рейтинг: 0 / 0
Как устроено индексирование в Windows Search?
    #37054825
Winnipuh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МихаилРWinnipuhмне надо сркщивать поиск в базе и поиск в файлах, файлы как-то связаны с объектами в базе (мс скл)
сейчас я использую поисковые запросы из t-sql, но это не очень хорошо о производительности.

Не до конца понял - поправьте, если что:
- у вас локальное приложение, которое сохраняет что-то в базе и в неких файлах (если не локально, то Windows Search не самое лучшее решение, хотябы потому, что поддерживает только 1 индекс - на машину. Тут лучше смотреть на специализированные поисковые сервера - тот же MS Search Server. Ну или делать свое).
- для поиска вы используете кросс-запросы из T-SQL (которые, как я помню, адресуются в Indexing Services). Т.е. одним запросом поиск и по базе, и по файлам.
В целом логичное решение. Только почему не устраивает скорость... Не думаю, что будет какое-то радикально более быстроее решение.

Или я чего-то недопонял?

все правильно, т.е. в базе для объекта записаны имена файлов и еще дополнительаня информация, ищу и в базе, и в соответствующих файлах и потом объединяю в виде суммарного результата для объекта.
да, файлы на сетевых дисках, именно к индекс серверу обращаюсь из транзакта.

Для больших баз не очень хоршая скорость, это связано со спецификой задачи.

Я экспериментирую в том смысле, что скажем в lucene я создаю параллельно индексы, и поиск в них делаю тоже запуская несколько параллельных запросов, потом объедняю их, люцен может так делать... и он же может индексировать файлы... Естественно, вопросы транзакционности пока не рассматриваются.
Не очень хорошая производительность на больших базах, где полнотекстовые каталоги занимают гиг 50..
...
Рейтинг: 0 / 0
Как устроено индексирование в Windows Search?
    #37055101
МихаилР
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Winnipuh,

Понял. В целом, по тому пути, по которому вы сейчас идете шли и большинство известных мне разработчиков СЭД. Т.е. хранение отдельного полнотекстового индекса (кроме систем, которые весь контент хранят в базе).

Каких-то радикально новых вещей не предложу.
Максимум - это хранить полнотекстовый индекс для файлов прямо в базе MS SQL. Чтобы не хранить сами файлы (подозреваю, что там файлы самых разных форматов) предварительно экстрактировать весь текст используя те же IFilters.

Если будут конкретные вопросы, пишите, постараюсь помочь.
...
Рейтинг: 0 / 0
Как устроено индексирование в Windows Search?
    #37055265
Winnipuh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МихаилР,

спасибо!
продолжу эксперименты
...
Рейтинг: 0 / 0
14 сообщений из 14, страница 1 из 1
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Как устроено индексирование в Windows Search?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]