5.7 KiB
type, status, related
| type | status | related | |||
|---|---|---|---|---|---|
| reference | current |
|
Поиск и индексация
Четыре разных контура поиска. Не путать: у каждого свой индекс, свои входы и свой способ обновления.
| Контур | Что ищет | Индекс | Обновление | Вход |
|---|---|---|---|---|
REST @search |
только имена в БД | нет | — (живой запрос) | oo search (по умолчанию --backend oo) |
ES files_file |
имя + текст Office | Elasticsearch портала | сервер, асинхронно | oo search --content |
ES oo_docs_text |
PDF/сканы (свой) | Elasticsearch портала | oo index |
oo search --backend own |
TSV ooscan |
файлы папок | файл *.tsv |
ooscan <folder...> |
потребитель (не библиотека) |
Карта кода
file_core.go— интерфейсыSearcher, моделиSearchQuery/SearchHit.file_es.go—ESSearcher(индекс OnlyOfficefiles_file).file_es_text.go—ESTextIndex(oo_docs_text):Ensure,Put,Delete,Search.file_text_index.go—TextIndexer: обход папок (FileStore.List), download (FileStore.Download), извлечение текста (internal/docpipe), запись вTextIndex; пул воркеров.file_facade.go— связка бэкендов (Files().Search(), порядок и fallback).- CLI:
cmd/oo/search.go,cmd/oo/index.go. - Разовые бинари для match:
cmd/ooscan/(TSV-индекс папок),cmd/pdfamount/(суммы по PDF в папке). internal/docpipe— текст из PDF (pdftotext), для сканов OCR (ocrmypdf/tesseract), вложения PDF (pdfdetach).
Поиск
# имя, индекс портала
oo search "Rechnung" --limit 50 --json
# имя + текст Office (docx/xlsx/pptx)
oo search "Mahngebühr" --content
# свой индекс: PDF и сканы
oo search "S1019" --backend own --folder 649
Флаги oo search: --content, --folder ID, --limit N, --backend oo|own,
--substring, --json. Требует ONLYOFFICE_ES_URL (см.
elasticsearch.md); --backend own дополнительно ничего не
требует от сервера — читает oo_docs_text.
Почему не REST: GET /api/2.0/files/@search/{query} ищет только имя в БД
(fileDao.Search), ES не трогает. Почему PDF не в files_file: сервер индексит
контент только для форматов из files.index.formats (по умолчанию
.pptx|.xlsx|.docx) — отсюда свой oo_docs_text.
Обновление своего индекса (oo index)
# одна папка
oo index folder 649 --recursive --exts pdf
# точечно по id
oo index files 3576 3578
# без записи: что было бы проиндексировано
oo index folder 649 --recursive --dry-run
Флаги: --recursive, --exts pdf (по умолчанию), --limit N,
--workers 3, --lang deu+eng, --min-chars N (порог текстового слоя, ниже
которого включается OCR), --work-dir, --backend rest|dav, --dry-run,
--json.
Свойства:
- Идемпотентно: upsert по
idфайла; повтор не двоит. - Сервер OnlyOffice не меняется: индекс живёт рядом (
ONLYOFFICE_ES_TEXT_INDEX, по умолчаниюoo_docs_text). - Медленно на сканах (OCR на каждый файл). Ограничивай
--folder/--limit, не индексируй корень целиком. - Индексация PDF в
files_fileне делается — толькоoo_docs_text.
Bulk-инструменты ooscan / pdfamount
Плоский TSV без Elasticsearch, для внешних потребителей.
# рекурсивный индекс папок: file_id, folder_id, path, title
ooscan <FOLDER_ID>... > index.tsv
# суммы по PDF папки: file_id, title, amount
pdfamount <FOLDER_ID> [TITLE_FILTER] > amounts.tsv
ooscan: троттлинг 350 мс на папку,DoRetryна 429, глубина до 8,path— путь внутри просканированного корня.pdfamount: строка с%/MwSt/USt/Prozent/Steuerсуммой не считается; приоритет меток (zu zahlender betrag>rechnungsbetrag> … >summe).- Какие корни сканировать и как обновлять индекс — решает потребитель; это не
часть библиотеки. Сверка Excel —
office-assistant(cmd/match,docs/reference/match-index.md).
Грабли
- ES слушает только
127.0.0.1:9200внутри VM — SSH-туннель обязателен (-o ControlMaster=no -o ControlPath=none, см. elasticsearch.md). - Портальные листинги/скачивание упираются в 429; все bulk-пути идут через
DoRetry(линейный бэкофф),ooscanдополнительно спит 350 мс на папку. files_fileобновляется сервером асинхронно — свежий файл виден не сразу.titleanalyzerwhitespacecustom: имя — один токен, подстрока только через--substring(или wildcard).