# Private document search and AI answers: three Apache paths

Start with approved answers, then document search, then a local model. Three Apache paths with permission tests, setup steps and 36 month costs.

Author: J.A. Watte
Published: October 30, 2026
Source: https://jwatte.com/blog/private-document-search-ai-answers-apache/

---

**A private “chatbot that knows our documents” is mostly search. The model summarizes what search finds. Keep the whole processing path on your own hardware when records cannot go to hosted AI, and build in this order: approved answers first, document search second, AI third.**

That order saves buying a complicated system to answer a question someone could have settled with a maintained handbook. It also gives you something useful if the model cannot reliably summarize your files. Staff can still open the source document and read it.

The [Apache search guide](/blog/apache-search-knowledge-base-small-business/) covers the individual projects. Here we connect them into three choices, including the identity checks between the boxes. We read official documentation and reused the series' verified October 29 and 30, 2026 research. We have not installed or benchmarked this stack. Business sizes, hours and workloads below are our planning assumptions; the examples are illustrations.

## Decide what “knows our documents” means

A useful answer has a source, a date and an audience. “What is the mileage reimbursement procedure?” may have one approved answer. “Which inspection reports mention this defect?” needs document retrieval. “Summarize the changes between these approved revisions” might benefit from a model after retrieval works.

| Path | Pieces | Who owns it | Stop here when |
|---|---|---|---|
| Low: approved answers | Apache Answer, MySQL, private web access | A capable owner or helper, plus a content editor | Staff need repeatable explanations |
| Medium: searchable documents | Tika, Solr, a search application; later local embeddings, a local model and LiteLLM | A developer and server administrator | One audience can read the whole approved collection |
| High: different people, different permissions | ManifoldCF, repository authorities, Solr, application authorization, local inference, Answer and OpenNLP review | IT, a developer, records owners and a backup administrator | Permission differences justify the continuing work |

“Private” needs a written definition. A VPS is rented infrastructure under a provider's control. A locally running model can still receive documents through a hosted gateway or send telemetry elsewhere. If policy forbids those processors, use approved on premises hardware, internal access and local backups with an independently protected copy. The rental figures below are a comparison allowance, not permission to put restricted records on a public cloud.

## RAG before fine tuning

Retrieval augmented generation, usually shortened to RAG, searches a maintained collection and gives selected passages to a model with the question. Updating the index changes what can be retrieved without retraining the answering model. The [original RAG paper](https://arxiv.org/abs/2005.11401) combines a generator with an external retrieved memory. Our implementation advice is simpler: preserve source identifiers, retrieve authorized evidence and require citations.

Fine tuning changes the model's learned behavior. It can improve a repeated answer format, vocabulary or task style when you have good training examples. It can also change factual behavior, but it is a poor first mechanism for maintaining this month's policy revision or withdrawing access to a confidential file.

[LoRA](https://arxiv.org/abs/2106.09685) trains smaller adapter weights while keeping the base model weights frozen. [QLoRA](https://arxiv.org/abs/2305.14314) reduces training memory further by using a quantized frozen base model with trainable adapters. Neither supplies a document permissions system or automatically produces a verifiable citation.

We recommend RAG first because documents change, permissions change and people need to inspect the evidence. Add fine tuning only after a measured failure remains, such as an unreliable structured format. Training on confidential files creates another asset to govern; removing a source file does not remove information learned in weights. Retrieval also makes mistakes, so “uses RAG” is a design description, not a correctness guarantee.

## Low: put the approved answer in Apache Answer

Answer is an internal question and answer site. Staff ask, an editor maintains the useful answer, and future readers find it through tags and search. There is no generative model in this path. That is enough for many operating procedures.

For example, a nine person HVAC company wants technicians to find approved controller reset instructions. It would publish model specific questions, link the manufacturer's instructions and assign the service lead to review changes. A technician searches before calling the office. Budget the low path below, $92 to $230 monthly including administration, with content writing budgeted separately.

For example, a two location bakery with fourteen staff wants opening and allergen handling procedures in one place. Answer holds approved instructions and review dates; it does not improvise food safety advice. A shift lead can flag an outdated answer while the responsible manager decides the correction. The same small installation budget applies by assumption, not as a capacity guarantee.

### Setup and first test

1. Choose [Answer 2.0.3](https://answer.apache.org/download/), released October 9, 2026, and follow the official [Docker Compose installation](https://answer.apache.org/docs/installation/). Pin the reviewed image and keep database and upload storage persistent. The guide also offers Docker and binary routes.
2. Choose the database before loading real content. The [Answer FAQ](https://answer.apache.org/docs/faq/) recommends MySQL for actual use. Keep its credentials separate from the administrator login, and test a database plus uploaded file restore.
3. Restrict access and registration, configure HTTPS and required mail delivery, and create an ordinary staff account for testing. The [plugin directory](https://answer.apache.org/plugins/) lists generic OAuth2 and Elasticsearch, MeiliSearch and Algolia search plugins. It does not list an LDAP or SAML plugin in the supplied check. Do not promise direct directory integration or assume Answer uses Solr automatically.
4. Enter a small approved question set, then test finding an answer, correcting it, retiring it and excluding an unauthorized reader. Record who approves answers. A popular answer can still be wrong.
5. Use the browser URL directly or make it a Microsoft Teams Website bookmark. [Microsoft's announcement](https://devblogs.microsoft.com/microsoft365dev/upcoming-updates-to-loading-websites-in-teams-tabs/) says new Teams Website tabs open links in a browser. Test whether the page loads inside your actual tab or opens externally, and test sign-in. A custom embedded Teams app is separate development.

Our pilot allowance is one 2 vCPU, 4 GiB server with 80 GiB disk. Answer's checked installation pages do not promise a universal hardware minimum. Measure your database and uploads. A capable helper needs Docker, TLS, backup and account administration skills; our operating allowance is 4 to 12 setup hours and 1 to 3 monthly hours.

The advantage is understandable ownership: a person approves the answer. The tradeoff is editorial work, and Answer does not search all the file shares merely because it has a search box. Skip it if staff already use a maintained handbook that answers these questions.

## Medium: find documents before generating answers

Use this path for documents already public or approved for everyone in the pilot. Tika extracts text and metadata. Solr indexes that text. Your application supplies the search screen, source links and later the model request. There is custom integration work between those pieces.

For example, a twelve person manufacturer's quality team cannot find the current public material specification among old downloads. Index approved specifications with revision and status fields, then show those fields beside every result. On a normal day the technician opens the current specification before making a decision. The search pilot costs $116 to $254 monthly below; it is not a price for certifying production decisions or buying a GPU.

For example, a six person accounting firm wants staff to search public tax guidance and its own approved training notes. Start with that collection and explicit publication dates. The normal change is a source link beside the proposed explanation. Use the same search pilot budget. Check the GLBA Safeguards Rule before introducing client tax or financial records; those records are outside this example.

### Build the retrieval path in stages

1. Inventory a permitted sample and keep the originals authoritative. Record document ID, source link, title, revision, owner, extraction time and audience. Follow [Tika's download instructions](https://tika.apache.org/download.html): 4.2.0 requires Java 17 or later and ships ZIP distributions, not runnable JARs. The supported 3.x line is 3.3.3 with Java 11 or later. Use the matching distribution instructions, not an old command pasted onto a new ZIP.
2. Run extraction in an isolated worker with resource limits. Tika detects and extracts metadata and text from [over a thousand formats](https://tika.apache.org/3.2.3/formats.html). Scanned pages need OCR; its [Tesseract integration](https://cwiki.apache.org/confluence/display/TIKA/TikaOCR) uses TesseractOCRParser. Install and test Tesseract separately where needed. Inspect a scan, table and ordinary text PDF against their originals. OCR errors must not silently become policy.
3. Follow the [Solr 10 production guide](https://solr.apache.org/guide/solr/10_0/deployment-guide/taking-solr-to-production.html), using Java 21 and a reviewed binary or official Docker image. Keep the administrative and query services private. Create fields for extracted text and source metadata, then build keyword search and revision filters before adding a model.
4. When keyword results show a measured vocabulary problem, add [dense vector search](https://solr.apache.org/guide/solr/latest/query-guide/dense-vector-search.html). Configure `DenseVectorField`, its `vectorDimension` and `similarityFunction` for your chosen embedding model. Use the [Ollama embedding route](https://docs.ollama.com/capabilities/embeddings) to generate document and query vectors with the same compatible local model. An embedding is a numerical representation for matching meaning; Solr does not create useful embeddings merely because a vector field exists.
5. Split long text at useful boundaries and preserve source and page or section references on each passage. Changing the embedding model or chunking scheme can require reindexing. Keep keyword search for identifiers and exact phrases; test combined retrieval against the same questions.
6. Only then add a local runtime such as [Ollama](https://docs.ollama.com/linux) behind LiteLLM. Select a model with an acceptable license and measured hardware requirements. Ollama's [FAQ](https://docs.ollama.com/faq) documents `OLLAMA_NO_CLOUD=1` for disabling cloud features; restart and verify the data path. Keep embeddings local too. The [gateway and backup guide](/blog/ai-api-vs-subscription-guardrails-litellm-backups/) covers caller keys, allowed models, limits and approved packages.

The application should send only the authorized passages and question, require an answer with source references, and offer “I don't know from these documents” when evidence is missing. Validate that returned references belong to the retrieved set, allow only approved source URL schemes and destinations, and let readers open the supporting passage. A citation that exists can still fail to support the sentence; include that in human scoring.

Do not let the model browse arbitrary URLs, execute document instructions or change records. A paragraph telling it to ignore rules is document content. The application controls retrieval and source links. If local inference is unavailable, return search results or a clear error; an outage must not switch private content to a hosted fallback.

Our constrained search pilot assumes one 4 vCPU, 8 GiB server with 160 GiB disk and extraction jobs that run separately from busy querying. This is a sizing assumption. Solr's guide notes production Java heaps can themselves reach 8 to 16 GB, so an 8 GiB whole machine will not fit every workload. Count the index, vectors, filesystem cache, extraction peaks and backup staging before selecting hardware.

Local generation needs its own sizing and operating quote. A CPU trial can test behavior, while a GPU may be needed for acceptable interactive speed and concurrency. Model weights, quantization, context length and concurrent requests affect memory. Use the [self hosted AI server guide](/blog/self-hosted-ai-server-from-scratch/) and [AI workstation comparison](/blog/sovereign-advantage-dedicated-ai-workstation/) for the sizing discussion. We add no unsourced GPU price here.

This path offers inspectable sources and a useful search fallback. Its drawback is the application work and document cleanup. Skip the model when keyword results already get staff to the right paragraph quickly.

## High: carry permissions all the way to the answer

ManifoldCF connects repositories and carries documents and access permissions into search systems. That is the beginning of permission aware retrieval. The application still needs to identify the person and enforce the corresponding access filters before text reaches the model.

For example, an eighteen person property manager wants maintenance procedures searchable without revealing tenant correspondence to every contractor. IT would separate the public procedure pilot from restricted records, configure repository identities and test revoked access. A normal day's result list changes with the signed-in person. Budget the IT operating allowance of 6 to 16 monthly hours plus infrastructure, connectors and development; the medium cost table is not a quote for this job.

For example, an eight person law office wants lawyers to find approved research within the matters they may access. Check attorney client confidentiality and applicable professional duties before indexing client material; [ABA Model Rule 1.6](https://www.americanbar.org/groups/professional_responsibility/publications/model_rules_of_professional_conduct/rule_1_6_confidentiality_of_information/) is a starting reference, subject to locally adopted rules. The office needs demonstrable matter separation, including citations, snippets and conversation history. It has the same IT allowance and a provider quote, not a bargain server promise.

### Assemble and test the permissions path

1. Start with [ManifoldCF 2.31](https://manifoldcf.apache.org/en_US/download.html). Its published [deployment guide](https://manifoldcf.apache.org/release/release-2.30/en_US/how-to-build-and-deploy.html) still describes 2.30. The [2.31 release changes](https://downloads.apache.org/manifoldcf/apache-manifoldcf-2.31/apache-manifoldcf-2.31.CHANGES.txt) identify the move to Java 25; use JDK 25 for this release. Older Java 11 README guidance is stale. Validate the database, connectors and Solr 10 combination rather than assuming a shared Apache name means compatibility.
2. Choose the repository connector, authority connector and Solr output for one collection. Have IT demonstrate how a source account maps to search access tokens, including groups, explicit denies and departed staff. The [ManifoldCF security model](https://manifoldcf.apache.org/en_US/security.html) describes the query integration needed. Copying ACL fields without enforcing them at query time leaves the design unfinished.
3. Authenticate each request server side, derive permissions from the trusted identity service, and apply them during retrieval. Deny access when identity or authority lookup fails. Never ask the model to remove unauthorized passages after it has received them.
4. Test two ordinary users, nested group changes, a restricted document, a renamed file, deletion and access revocation. Prevent unauthorized titles, counts, facets, snippets and vector results from leaking. ManifoldCF also discusses global search statistics as a possible information leak; an integrator must consider it where even document existence is sensitive.
5. Add the local model through the restricted gateway only after these tests pass. Separate conversation history and caches by authorized audience and policy version, or disable shared caching. Recheck authorization when opening a citation. Curated Answer entries need demonstrated audience controls or separate private sites. Do not assume native matter level permissions, or copy a restricted answer into a generally visible forum.
6. Monitor collection freshness, permission refresh failures, extraction failures, denied queries, storage, model availability and backup completion. Preserve the sources and configurations needed to rebuild, and test the restored system with a denied user before reopening it.

For a generic county IT department, start with published ordinances, approved forms and a staff Q&A collection. The clerk should see the authoritative source and its revision date alongside a proposed answer. Restricted personnel, legal and law enforcement collections stay outside the pilot. Use the high path only after the county can name its identity owner, records officer and recovery operator; obtain a scoped quote for that work.

A school district office with ten administrative staff could use the low path for approved public procedures and the medium path for published board policies. Staff find the current policy instead of an old attachment. Those pilot budgets apply only to those collections. Check [FERPA](https://studentprivacy.ed.gov/ferpa) before including education records, and stop before loading student files into a broadly shared index.

A single process ManifoldCF evaluation can share a host, but production sizing must include its database, crawl state, parsing workers and Solr as well as inference. Separate parser privileges and resource limits even when services share hardware. Add redundancy according to the recovery target; there is no universal node count or RAM minimum in the checked deployment guide. Our judgment is to price the complete layout after a representative collection test.

The high path can respect existing repository boundaries, but a connector upgrade or delayed permissions refresh can break that promise. It needs IT coverage when the primary administrator is away. A managed service with demonstrated connectors, contractual controls and support can be the better purchase.

## Where OpenNLP belongs

[OpenNLP's project downloads](https://opennlp.apache.org/download.html) list stable 2.5.12 and the separate 3.0.0-M6 milestone, announced September 11, 2026. For the stable path, use the [2.5.12 manual](https://opennlp.apache.org/docs/2.5.12/manual/opennlp.html) and [Java 17](https://raw.githubusercontent.com/apache/opennlp/opennlp-2.5.12/pom.xml); the [3.x branch](https://github.com/apache/opennlp) requires Java 21. A milestone is not the stable default.

Use sentence detection to split readable passages, language detection to route documents to suitable processing, and named entity recognition to flag possible names and other entities for review. This happens after extraction and before approving sensitive material for indexing. Your developer needs appropriate trusted models and examples in the languages staff actually use.

OpenNLP is not a chatbot. It also does not certify that text contains no personal information. Names can be missed, ordinary words can be flagged, and account numbers may need explicit rules. Route uncertain files to a person and measure misses as well as false alarms. The [OpenNLP section in the AI guide](/blog/apache-ai-machine-learning-small-business/#opennlp-analyze-text-locally-without-pretending-it-is-a-chatbot) covers model evaluation in more detail.

## Records, accessibility and parser security

For a county or city, prompts, answers and logs may be records subject to state retention schedules and public records requests. Decide classification, legal holds, deletion and request handling with the records officer before enabling full conversation logs. [Washington's public records guidance](https://www.atg.wa.gov/obtaining-records) illustrates electronic records coverage in one state; your jurisdiction decides the applicable rules. There is no universal retention period in this guide. Keep [CJIS data](https://le.fbi.gov/cjis-division/cjis-security-policy-resource-center) outside scope; adding a local model does not establish authorization to process it.

Public tools need an accessibility review under applicable requirements, including [DOJ's state and local government web guidance](https://www.ada.gov/resources/2024-03-08-web-rule/). Check its scope and current compliance date. Staff tools also need usable keyboard navigation, screen reader labels, clear focus and accessible source documents. Test an error, a citation and the “I don't know” state, not just the chat input. Do not claim conformance from a library choice.

Businesses should check [HIPAA](https://www.hhs.gov/hipaa/for-professionals/special-topics/cloud-computing/index.html) before storing protected health information, including required business associate agreements, [GLBA Safeguards](https://www.ftc.gov/business-guidance/resources/ftc-safeguards-rule-what-your-business-needs-know) where covered financial activities apply, and professional confidentiality duties for client legal files. Local hosting and encryption are parts of a plan, not compliance certificates. This is planning information, not legal advice.

Treat a file parser as an exposed component. [Tika's security model](https://tika.apache.org/security-model.html) warns that hostile files can crash, hang or compromise a parsing process. Run it with limited privileges, restricted network access, temporary storage and limits on input size, memory and processing time. Escape extracted text before displaying it. [Tika advisories](https://tika.apache.org/security.html) list CVE-2025-54988, XML external entity processing in PDF parsing affecting 1.13 through 3.2.1. Patch old parsers and retain isolation.

[Solr's security notices](https://solr.apache.org/security-news.html) include a Solr 10.0.0 JWT authentication default problem: explicitly set `blockUnknown` to `true` when using that plugin, then test unauthenticated requests. [ManifoldCF's Apache advisory list](https://security.apache.org/projects/manifoldcf/) identifies CVE-2022-45910, LDAP injection affecting releases through 2.23. Do not build a new installation from an old connector tutorial's vulnerable version.

Review [Answer security](https://answer.apache.org/community/security/), [OpenNLP security](https://opennlp.apache.org/security.html) and [ASF security guidance](https://www.apache.org/security/) as well. Answer fixed reusable password reset links, CVE-2024-41888, in 1.3.5; avoid old images. OpenNLP treats models, dictionaries and training data as trusted assets; vet them like code. For LiteLLM, use the incident and package checks in the linked gateway guide. Pin approved releases, rehearse updates on copied data and rerun permission and restore tests after changes.

The [Apache License 2.0](https://www.apache.org/licenses/LICENSE-2.0) permits commercial use and modification subject to its conditions, including distribution notices. It provides no warranty or trademark endorsement. Model weights can have separate licenses.

## The 36 month cost, before buying the chatbot

Prices are US dollars before tax. We reuse October 29 research: [DigitalOcean](https://www.digitalocean.com/pricing/droplets) at $24 monthly for the small tier or $48 for medium, and [Backblaze B2](https://www.backblaze.com/cloud-storage/pricing) at $6.95 per decimal TB monthly with the first 10 GB free. Our retained backup assumptions are 50 to 200 GB including versions: $0.278 to $1.3205 monthly. Transfer and requests stay within included allowances by assumption.

The labor rate is $68.09 hourly, derived from the [BLS administrator wage](https://data.bls.gov/oesprofile/?areas=INDUSTRY,STATE,MSA&major_group=150000&measure=01&occupation=151244&year=2025) of $47.66 divided by a [70.0% compensation wage share](https://data.bls.gov/timeseries/CMU2020000000000P). It estimates employee compensation. An outside IT provider bills more; get a quote.

Both bounded single host pilots use the series assumptions of 4 to 12 setup hours and 1 to 3 monthly administration hours. Medium remains a developer and IT responsibility. These hours cover operating a prepared search pilot, excluding custom application development, document cleanup, migration, OCR conversion projects, compliance work, training and major incidents. A complete model path adds inference hardware, gateway operations and integration. None is silently priced at zero.

[Discourse Pro](https://www.discourse.org/pricing) is a hosted Q&A alternative at $100 monthly, including five administrator or moderator seats, unlimited members and the Solved plugin. [Algolia Grow](https://www.algolia.com/pricing/) is a hosted search alternative. Our fixed workload of 100,000 requests and 50,000 records costs (100,000 minus 10,000 included requests) / 1,000 × $0.50 = $45 monthly. Records fit its 100,000 allowance. These are alternative products, not hosted copies of the Apache stack.

| Cost | Low path, low / high assumption | Medium search pilot, low / high assumption |
|---|---:|---:|
| Self hosted setup | $272 / $817 | $272 / $817 |
| Self hosted monthly, including labor | $92 / $230 | $116 / $254 |
| Self hosted 36 months | $3,598 / $9,082 | $4,462 / $9,946 |
| Managed 36 month subscription | $3,600 / $3,600 | $1,620 / $1,620 |
| Self hosted saving | $2 / costs $5,482 more | Costs $2,842 / $8,326 more |
| Break even month | 36 / never | Never / never |

Formula: setup hours × $68.09 + 36 × (hosting + backup + monthly hours × $68.09). Low Answer is 4 × $68.09 + 36 × ($24 + $0.278 + $68.09) = $3,597.608. Compute before rounding. Break even divides extra setup by positive monthly savings and rounds up; when self hosting starts and runs more expensively, it is never.

Managed incremental setup is zero by assumption for these subscription comparisons. Content editing and integration are excluded on both sides; ongoing customer administration needs a separate allowance. Algolia here prices keyword search only, not a private RAG system or permission connector contract. At these volumes, managed search wins the operating comparison. Answer's low case saves only $2, so cost alone is a weak reason to self host. Private processing requirements may decide the choice independently of savings.

## Setup time when Claude or ChatGPT does the typing

Keep the same hosts and backup volumes. Our single host AI assumptions use 50% to 80% of manual setup hours and 75% to 100% of monthly administration. Prompting, review, testing and corrections are included. Review occupies 1 to 3 setup hours and 0.5 to 1.5 monthly hours within these totals. These are planning scenarios, not measured Apache installations.

| View over setup and 36 operating months | Low path, low / high | Medium search pilot, low / high |
|---|---:|---:|
| Manual setup hours | 4 / 12 | 4 / 12 |
| AI setup hours | 2 / 9.6 | 2 / 9.6 |
| Manual monthly hours | 1 / 3 | 1 / 3 |
| AI monthly hours | 0.75 / 3 | 0.75 / 3 |
| Manual total | $3,598 / $9,082 | $4,462 / $9,946 |
| Claude Pro subscription total | $3,049 / $9,119 | $3,913 / $9,983 |
| ChatGPT Plus subscription total | $3,049 / $9,119 | $3,913 / $9,983 |
| Claude Opus 5.5 API total | $2,863 / $9,033 | $3,727 / $9,897 |
| GPT-6 Astra API total | $2,886 / $9,204 | $3,750 / $10,068 |

[Claude Pro](https://claude.com/pricing) and [ChatGPT Plus](https://chatgpt.com/pricing/) are $20 monthly in the supplied October 29 research. Charge a full setup month, then $5 monthly only if other work uses the remaining 75%. Exclusive use adds $540 over 36 months. Equal prices do not establish equal limits or outcomes; check allowances and price extra usage.

AI total = S × q × $68.09 + T0 + 36 × (H + A × r × $68.09 + Tm). S/A are manual setup/monthly hours, q/r the AI shares, H hosting plus backups, and T0/Tm the setup/monthly tool fees.

Our cumulative API budgets are 200,000 to 1,000,000 setup input tokens and 20,000 to 100,000 output; monthly budgets are half those amounts, including retries and billed reasoning. Low input is 30% ordinary, 10% short cache writes and 60% cache reads; high input is uncached. [Opus fees](https://platform.claude.com/docs/en/about-claude/pricing) are $0.764/$0.382 setup/monthly low and $6/$3 high. [Astra fees](https://developers.openai.com/api/docs/pricing) are $1.97/$0.985 low and $15/$7.50 high. The kit gives the rates and worksheet. These are setup assistants' costs, not the local answering model's runtime bill.

Claude Code or [Codex CLI](https://developers.openai.com/codex/cli) can draft configuration and restore commands. [Desktop Commander](https://desktopcommander.app/) can edit files and inspect logs on an authorized server; the base budget uses its free local server. [Claude in Chrome](https://support.claude.com/en/articles/12012173-get-started-with-claude-in-chrome) can inspect provider dashboards and the application while you watch. ChatGPT's [cloud browser](https://help.openai.com/en/articles/20001280-using-cloud-browser-in-chatgpt) is a separate browser; confirm availability.

Use a new or staging server, approved commands or a restricted sandbox, and sanitized examples. A hosted coding assistant reading private documents or logs would defeat a local data policy. Keep secrets out of chat and limit its file access. Use subscriptions for supervised supported tools and API keys for custom pipelines. Review changes and perform the restore yourself or with the responsible operator.

Low Answer subscription assistance saves $549 against manual operation and breaks even against Discourse in month 8; either API view reaches that comparison in month 6. High subscription cases cost $37 more than manual and become more expensive in month 29 because monthly labor does not fall. Medium still loses to the $1,620 managed search subscription. For the high path, use the series IT assumptions, 24 to 60 setup hours and 6 to 16 monthly hours, plus separately quoted integration; do not apply the small pilot's typing savings to an entire county deployment.

## Download the setup kit

The [private document search kit](/downloads/private-document-search-ai-answers-apache-kit.md) includes a one page decision checklist, installation routes, a cost worksheet and acceptance tests. Start with 50 real questions with known answers, a restricted document that must never appear, and questions the collection cannot answer. Measure the “I don't know” rate separately for answerable and unanswerable questions. Stop if permissions leak, citations do not support answers or nobody owns recovery.

The small budget discipline in *The $100 Network* fits here: pay for a useful job someone can verify. A maintained answer and a reliable source link may be the whole job.

## Related reading

- [Apache search and knowledge tools](/blog/apache-search-knowledge-base-small-business/)
- [Tika document text extraction](/blog/apache-tika-document-text-extraction-small-business/)
- [ManifoldCF permission aware search](/blog/apache-manifoldcf-permission-aware-search-small-business/)
- [Apache AI and machine learning tools](/blog/apache-ai-machine-learning-small-business/)
- [An Apache stack for small and medium businesses](/blog/apache-stack-small-medium-business/)
- [API guardrails, LiteLLM and backups](/blog/ai-api-vs-subscription-guardrails-litellm-backups/)
- [Private server access](/blog/kimsufi-vps-cloudflare-tunnel-access/)
- [Self hosted AI server](/blog/self-hosted-ai-server-from-scratch/)

## Fact-check notes and sources

Official pages below were read October 30, 2026; UTC times identify the checks. Hosting, labor and AI cost inputs reuse October 29 series observations: hosting/storage at 21:10, wages at 21:12, compensation share at 21:17, and AI prices at 23:27 to 23:32. The supplied regular-browser checks on October 29, about 22:10 to 22:20 UTC, also confirm Discourse and Algolia prices. Versions and prices can change. These are documentation checks, not deployment tests.

1. [original RAG paper](https://arxiv.org/abs/2005.11401). 00:33:17 UTC.
2. [LoRA](https://arxiv.org/abs/2106.09685). 00:33:18 UTC.
3. [QLoRA](https://arxiv.org/abs/2305.14314). 00:28:51 UTC.
4. [Answer 2.0.3](https://answer.apache.org/download/). 00:33:18 UTC.
5. [Docker Compose installation](https://answer.apache.org/docs/installation/). 00:33:19 UTC.
6. [Answer FAQ](https://answer.apache.org/docs/faq/). 00:33:17 UTC.
7. [plugin directory](https://answer.apache.org/plugins/). 00:33:20 UTC.
8. [Microsoft's announcement](https://devblogs.microsoft.com/microsoft365dev/upcoming-updates-to-loading-websites-in-teams-tabs/). 00:28:49 UTC.
9. [Tika's download instructions](https://tika.apache.org/download.html). 00:33:19 UTC.
10. [over a thousand formats](https://tika.apache.org/3.2.3/formats.html). 00:33:20 UTC.
11. [Tesseract integration](https://cwiki.apache.org/confluence/display/TIKA/TikaOCR). 00:33:21 UTC.
12. [Solr 10 production guide](https://solr.apache.org/guide/solr/10_0/deployment-guide/taking-solr-to-production.html). 00:33:19 UTC.
13. [dense vector search](https://solr.apache.org/guide/solr/latest/query-guide/dense-vector-search.html). 00:33:21 UTC.
14. [Ollama embedding route](https://docs.ollama.com/capabilities/embeddings). 00:35:29 UTC.
15. [Ollama](https://docs.ollama.com/linux). 00:33:21 UTC.
16. [FAQ](https://docs.ollama.com/faq). 00:33:22 UTC.
17. [ABA Model Rule 1.6](https://www.americanbar.org/groups/professional_responsibility/publications/model_rules_of_professional_conduct/rule_1_6_confidentiality_of_information/). 00:33:30 UTC.
18. [ManifoldCF 2.31](https://manifoldcf.apache.org/en_US/download.html). 00:33:22 UTC.
19. [deployment guide](https://manifoldcf.apache.org/release/release-2.30/en_US/how-to-build-and-deploy.html). 00:33:21 UTC.
20. [ManifoldCF security model](https://manifoldcf.apache.org/en_US/security.html). 00:33:30 UTC.
21. [FERPA](https://studentprivacy.ed.gov/ferpa). 00:33:31 UTC.
22. [OpenNLP's project downloads](https://opennlp.apache.org/download.html). 00:33:31 UTC.
23. [2.5.12 manual](https://opennlp.apache.org/docs/2.5.12/manual/opennlp.html). 00:33:30 UTC.
24. [Java 17](https://raw.githubusercontent.com/apache/opennlp/opennlp-2.5.12/pom.xml). 00:35:29 UTC.
25. [3.x branch](https://github.com/apache/opennlp). 00:35:30 UTC.
26. [Washington's public records guidance](https://www.atg.wa.gov/obtaining-records). 00:33:30 UTC.
27. [CJIS data](https://le.fbi.gov/cjis-division/cjis-security-policy-resource-center). 00:33:31 UTC.
28. [DOJ's state and local government web guidance](https://www.ada.gov/resources/2024-03-08-web-rule/). 00:33:31 UTC.
29. [HIPAA](https://www.hhs.gov/hipaa/for-professionals/special-topics/cloud-computing/index.html). 00:33:36 UTC.
30. [GLBA Safeguards](https://www.ftc.gov/business-guidance/resources/ftc-safeguards-rule-what-your-business-needs-know). 00:35:33 UTC.
31. [Tika's security model](https://tika.apache.org/security-model.html). 00:33:31 UTC.
32. [Tika advisories](https://tika.apache.org/security.html). 00:33:32 UTC.
33. [Solr's security notices](https://solr.apache.org/security-news.html). 00:33:31 UTC.
34. [ManifoldCF's Apache advisory list](https://security.apache.org/projects/manifoldcf/). 00:33:36 UTC.
35. [Answer security](https://answer.apache.org/community/security/). 00:33:36 UTC.
36. [OpenNLP security](https://opennlp.apache.org/security.html). 00:33:36 UTC.
37. [ASF security guidance](https://www.apache.org/security/). 00:33:36 UTC.
38. [Apache License 2.0](https://www.apache.org/licenses/LICENSE-2.0). 00:35:29 UTC.
39. [DigitalOcean](https://www.digitalocean.com/pricing/droplets). 00:33:36 UTC.
40. [Backblaze B2](https://www.backblaze.com/cloud-storage/pricing). 00:33:36 UTC.
41. [BLS administrator wage](https://data.bls.gov/oesprofile/?areas=INDUSTRY,STATE,MSA&major_group=150000&measure=01&occupation=151244&year=2025). 00:33:37 UTC.
42. [70.0% compensation wage share](https://data.bls.gov/timeseries/CMU2020000000000P). 00:33:38 UTC.
43. [Discourse Pro](https://www.discourse.org/pricing). 00:33:37 UTC.
44. [Algolia Grow](https://www.algolia.com/pricing/). 00:33:37 UTC.
45. [Claude Pro](https://claude.com/pricing). 00:33:37 UTC.
46. [ChatGPT Plus](https://chatgpt.com/pricing/). 00:33:38 UTC.
47. [Opus fees](https://platform.claude.com/docs/en/about-claude/pricing). 00:33:39 UTC.
48. [Astra fees](https://developers.openai.com/api/docs/pricing). 00:33:39 UTC.
49. [Codex CLI](https://developers.openai.com/codex/cli). 00:28:49 UTC.
50. [Desktop Commander](https://desktopcommander.app/). 00:33:38 UTC.
51. [Claude in Chrome](https://support.claude.com/en/articles/12012173-get-started-with-claude-in-chrome). 00:33:38 UTC.
52. [cloud browser](https://help.openai.com/en/articles/20001280-using-cloud-browser-in-chatgpt). 00:33:39 UTC.

53. [ManifoldCF 2.31 release changes](https://downloads.apache.org/manifoldcf/apache-manifoldcf-2.31/apache-manifoldcf-2.31.CHANGES.txt). Read October 30, 2026, 00:37 UTC.

*Apache, the Apache feather logo and the Apache project names are trademarks of The Apache Software Foundation. This site is not affiliated with or endorsed by the ASF. Other product names are used for identification only.*


---

Canonical HTML: https://jwatte.com/blog/private-document-search-ai-answers-apache/
RSS: https://jwatte.com/feed.xml
JSON Feed: https://jwatte.com/feed.json
Hero image: https://jwatte.com/images/private-document-search-ai-answers-apache.webp
