|
|
|
Как устроено индексирование в Windows Search?
|
|||
|---|---|---|---|
|
#18+
А точнее - индексирующий сервис. У меня задача в чем-то отдаленно напоминает такую же... Интересно, как он знает, какие файлы надо про- или переиндексирвоать? Есть набор фолдеров (или весь диск), которые надо проиндексировать. Пускаем сервис, он работает, все гут. Но по ходу работы появляются новые файлы, изменяются - ну предположим эти события можно ловить через FileSystemWatcher и доиндексировать.. А если остановить сервис и потом пустить его через какое-то время? Откуда он знает, с чего начинать, откуда продолжать? Хранит где-то свою базу с именами уже проиндексированных файлов? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.01.2011, 12:39 |
|
||
|
Как устроено индексирование в Windows Search?
|
|||
|---|---|---|---|
|
#18+
База хранится на локальном диске. Это скрытая директория с файлами в корневом каталоге. Текстовый индекс MS-Indexing Serv это не аналог индекса в БД и его состояние не всегда актуально. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.01.2011, 14:03 |
|
||
|
Как устроено индексирование в Windows Search?
|
|||
|---|---|---|---|
|
#18+
mayton1База хранится на локальном диске. Это скрытая директория с файлами в корневом каталоге. Текстовый индекс MS-Indexing Serv это не аналог индекса в БД и его состояние не всегда актуально. это да. А вот алгоритм работы интересует. Стартонул сервис, он идет по файлам, и видимо пишет информацию о них в свою базу. Потом я его остановил, стартонул через два дня снова. Что дальше он делает? Сканирует снова все файлы и сравнивает со своей базой на рпедмет надо ли индексировать. А если скажем при активном сервисе добавится или изменится много файлов, он не потеряет информацию о том, что изменилось? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.01.2011, 14:55 |
|
||
|
Как устроено индексирование в Windows Search?
|
|||
|---|---|---|---|
|
#18+
Winnipuhmayton1База хранится на локальном диске. Это скрытая директория с файлами в корневом каталоге. Текстовый индекс MS-Indexing Serv это не аналог индекса в БД и его состояние не всегда актуально. это да. А вот алгоритм работы интересует. Стартонул сервис, он идет по файлам, и видимо пишет информацию о них в свою базу. Потом я его остановил, стартонул через два дня снова. Что дальше он делает? Сканирует снова все файлы и сравнивает со своей базой на рпедмет надо ли индексировать. А если скажем при активном сервисе добавится или изменится много файлов, он не потеряет информацию о том, что изменилось? не знаю, чего он там индексирует, но как только я включил индекс, на хп и на семерке поиск перестал искать файлы... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.01.2011, 15:18 |
|
||
|
Как устроено индексирование в Windows Search?
|
|||
|---|---|---|---|
|
#18+
Winnipuh, -Храни в индексе параметр - дату/время последнего изменения файла. -В нтфс есть механизм уведомления об изменениях. Берлuнгер, поиск в висте и выше - просто офигенно удобная вещь. На ХП надо ставить кривоватый апдейт: серчь 4.0 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.01.2011, 20:44 |
|
||
|
Как устроено индексирование в Windows Search?
|
|||
|---|---|---|---|
|
#18+
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 . Из этих двух я бы внимательнее посмотрел на первый. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.01.2011, 15:13 |
|
||
|
Как устроено индексирование в Windows Search?
|
|||
|---|---|---|---|
|
#18+
МихаилР, спасибо за столь полезный ответ! Думаю Windows Search имеет АПИ, с которым можно работать из приложений, или из T-SQL. Т.е. так же как и Indexing Service имеет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.01.2011, 18:17 |
|
||
|
Как устроено индексирование в Windows Search?
|
|||
|---|---|---|---|
|
#18+
SiemarglWinnipuh, -Храни в индексе параметр - дату/время последнего изменения файла. -В нтфс есть механизм уведомления об изменениях. Берлuнгер, поиск в висте и выше - просто офигенно удобная вещь. На ХП надо ставить кривоватый апдейт: серчь 4.0 ставил, после этого собсна и перестало искать... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.01.2011, 22:36 |
|
||
|
Как устроено индексирование в Windows Search?
|
|||
|---|---|---|---|
|
#18+
WinnipuhДумаю Windows Search имеет АПИ, с которым можно работать из приложений, или из T-SQL. Да, если вы хотите использовать WS для поиска, то посмотрите на статью Querying the Index Programmatically , а особенно (мне кажется, это наиболее простой вариант) на Using SQL and AQS Approaches to Query the Index . Единственное, если вам придется писать собственные провайдеры хранилищь, это уже будет не шибко тривиальная задача, хотя и решаемая. А если индексировать придется только локальные файлы - все уже есть. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.01.2011, 08:04 |
|
||
|
Как устроено индексирование в Windows Search?
|
|||
|---|---|---|---|
|
#18+
МихаилРWinnipuhДумаю Windows Search имеет АПИ, с которым можно работать из приложений, или из T-SQL. Да, если вы хотите использовать WS для поиска, то посмотрите на статью Querying the Index Programmatically , а особенно (мне кажется, это наиболее простой вариант) на Using SQL and AQS Approaches to Query the Index . Единственное, если вам придется писать собственные провайдеры хранилищь, это уже будет не шибко тривиальная задача, хотя и решаемая. А если индексировать придется только локальные файлы - все уже есть. мне надо сркщивать поиск в базе и поиск в файлах, файлы как-то связаны с объектами в базе (мс скл) сейчас я использую поисковые запросы из t-sql, но это не очень хорошо о производительности. Пытаюсь найти решение, возможно использовать внешний поиск, типа lucene ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.01.2011, 14:20 |
|
||
|
Как устроено индексирование в Windows Search?
|
|||
|---|---|---|---|
|
#18+
Winnipuhмне надо сркщивать поиск в базе и поиск в файлах, файлы как-то связаны с объектами в базе (мс скл) сейчас я использую поисковые запросы из t-sql, но это не очень хорошо о производительности. Не до конца понял - поправьте, если что: - у вас локальное приложение, которое сохраняет что-то в базе и в неких файлах (если не локально, то Windows Search не самое лучшее решение, хотябы потому, что поддерживает только 1 индекс - на машину. Тут лучше смотреть на специализированные поисковые сервера - тот же MS Search Server. Ну или делать свое). - для поиска вы используете кросс-запросы из T-SQL (которые, как я помню, адресуются в Indexing Services). Т.е. одним запросом поиск и по базе, и по файлам. В целом логичное решение. Только почему не устраивает скорость... Не думаю, что будет какое-то радикально более быстроее решение. Или я чего-то недопонял? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.01.2011, 16:06 |
|
||
|
Как устроено индексирование в Windows Search?
|
|||
|---|---|---|---|
|
#18+
МихаилРWinnipuhмне надо сркщивать поиск в базе и поиск в файлах, файлы как-то связаны с объектами в базе (мс скл) сейчас я использую поисковые запросы из t-sql, но это не очень хорошо о производительности. Не до конца понял - поправьте, если что: - у вас локальное приложение, которое сохраняет что-то в базе и в неких файлах (если не локально, то Windows Search не самое лучшее решение, хотябы потому, что поддерживает только 1 индекс - на машину. Тут лучше смотреть на специализированные поисковые сервера - тот же MS Search Server. Ну или делать свое). - для поиска вы используете кросс-запросы из T-SQL (которые, как я помню, адресуются в Indexing Services). Т.е. одним запросом поиск и по базе, и по файлам. В целом логичное решение. Только почему не устраивает скорость... Не думаю, что будет какое-то радикально более быстроее решение. Или я чего-то недопонял? все правильно, т.е. в базе для объекта записаны имена файлов и еще дополнительаня информация, ищу и в базе, и в соответствующих файлах и потом объединяю в виде суммарного результата для объекта. да, файлы на сетевых дисках, именно к индекс серверу обращаюсь из транзакта. Для больших баз не очень хоршая скорость, это связано со спецификой задачи. Я экспериментирую в том смысле, что скажем в lucene я создаю параллельно индексы, и поиск в них делаю тоже запуская несколько параллельных запросов, потом объедняю их, люцен может так делать... и он же может индексировать файлы... Естественно, вопросы транзакционности пока не рассматриваются. Не очень хорошая производительность на больших базах, где полнотекстовые каталоги занимают гиг 50.. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.01.2011, 16:29 |
|
||
|
Как устроено индексирование в Windows Search?
|
|||
|---|---|---|---|
|
#18+
Winnipuh, Понял. В целом, по тому пути, по которому вы сейчас идете шли и большинство известных мне разработчиков СЭД. Т.е. хранение отдельного полнотекстового индекса (кроме систем, которые весь контент хранят в базе). Каких-то радикально новых вещей не предложу. Максимум - это хранить полнотекстовый индекс для файлов прямо в базе MS SQL. Чтобы не хранить сами файлы (подозреваю, что там файлы самых разных форматов) предварительно экстрактировать весь текст используя те же IFilters. Если будут конкретные вопросы, пишите, постараюсь помочь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.01.2011, 17:57 |
|
||
|
|

start [/forum/topic.php?fid=16&msg=37050131&tid=1343214]: |
0ms |
get settings: |
4ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
156ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
69ms |
get tp. blocked users: |
2ms |
| others: | 216ms |
| total: | 482ms |

| 0 / 0 |
