6.2 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 |
файлы папок (для match) | файл *.tsv |
ooscan <folder...> |
match -index |
Карта кода
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.
Индекс для match (ooscan → TSV)
cmd/match (office-assistant) не использует ES: он читает плоский TSV
file_id\tfolder_id\tpath\ttitle и опционально суммы
file_id\ttitle\tamount.
# TSV-индекс: рекурсивный обход папок (троттлинг 350 мс на папку, retry на 429)
ooscan 647 666 > /tmp/oo-index.tsv
# суммы по папке (напр. O2, id 671)
pdfamount 671 > /tmp/o2-amounts.tsv
# сверка (office-assistant)
match -xlsx liste.xlsx -index /tmp/oo-index.tsv -amounts /tmp/o2-amounts.tsv \
-url-base https://office.pro-dukt.de
ooscanпечатаетfile_id, folder_id, path, title;path— путь внутри просканированной папки (для подсказок иgesendet).- Обновление — просто повторить
ooscanпо нужным корням; выход перезаписывается. - Папки-источники задаёт потребитель (match): входные счета — корни
Eingangsrechnungen(#647) иexternal(#666); суммы — папка провайдера. - Полный обход большого дерева — минуты; сканируй только нужные корни.
- У
pdfamountстрока с%/MwSt/USt/Prozent/Steuerсуммой не считается; приоритет меток (zu zahlender betrag>rechnungsbetrag> … >summe).
Грабли
- 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).