<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Indexers on Lucille</title><link>https://kmwtechnology.github.io/lucille/docs-0.9.0/reference/indexers/</link><description>Recent content in Indexers on Lucille</description><generator>Hugo</generator><language>en</language><lastBuildDate>Mon, 09 Jun 2025 00:00:00 +0000</lastBuildDate><atom:link href="https://kmwtechnology.github.io/lucille/docs-0.9.0/reference/indexers/index.xml" rel="self" type="application/rss+xml"/><item><title>Solr Indexer</title><link>https://kmwtechnology.github.io/lucille/docs-0.9.0/reference/indexers/solr_indexer/</link><pubDate>Mon, 09 Jun 2025 00:00:00 +0000</pubDate><guid>https://kmwtechnology.github.io/lucille/docs-0.9.0/reference/indexers/solr_indexer/</guid><description>&lt;p&gt;&lt;code&gt;com.kmwllc.lucille.indexer.SolrIndexer&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Config block: &lt;code&gt;solr { ... }&lt;/code&gt;&lt;/p&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Parameter&lt;/th&gt;
 &lt;th&gt;Type&lt;/th&gt;
 &lt;th&gt;Required&lt;/th&gt;
 &lt;th&gt;Description&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;url&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;List&amp;lt;String&amp;gt;&lt;/td&gt;
 &lt;td&gt;No*&lt;/td&gt;
 &lt;td&gt;Solr base URLs (e.g., &lt;code&gt;http://localhost:8983/solr&lt;/code&gt;).&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;useCloudClient&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Boolean&lt;/td&gt;
 &lt;td&gt;No&lt;/td&gt;
 &lt;td&gt;Use SolrCloud client. Default: &lt;code&gt;false&lt;/code&gt;.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;defaultCollection&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;String&lt;/td&gt;
 &lt;td&gt;No&lt;/td&gt;
 &lt;td&gt;Target Solr collection.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;zkHosts&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;List&amp;lt;String&amp;gt;&lt;/td&gt;
 &lt;td&gt;No*&lt;/td&gt;
 &lt;td&gt;ZooKeeper addresses for SolrCloud (e.g., &lt;code&gt;[&amp;quot;zk1:2181&amp;quot;, &amp;quot;zk2:2181&amp;quot;]&lt;/code&gt;).&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;zkChroot&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;String&lt;/td&gt;
 &lt;td&gt;No&lt;/td&gt;
 &lt;td&gt;ZooKeeper chroot path for SolrCloud (e.g., &lt;code&gt;&amp;quot;/solr&amp;quot;&lt;/code&gt;).&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;userName&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;String&lt;/td&gt;
 &lt;td&gt;No&lt;/td&gt;
 &lt;td&gt;HTTP Basic Auth username.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;password&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;String&lt;/td&gt;
 &lt;td&gt;No&lt;/td&gt;
 &lt;td&gt;HTTP Basic Auth password.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;acceptInvalidCert&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Boolean&lt;/td&gt;
 &lt;td&gt;No&lt;/td&gt;
 &lt;td&gt;Accept invalid TLS certificates. Default: &lt;code&gt;false&lt;/code&gt;.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;*Provide either &lt;code&gt;url&lt;/code&gt; or (for SolrCloud) &lt;code&gt;zkHosts&lt;/code&gt;.&lt;/p&gt;</description></item><item><title>OpenSearch Indexer</title><link>https://kmwtechnology.github.io/lucille/docs-0.9.0/reference/indexers/opensearch_indexer/</link><pubDate>Mon, 09 Jun 2025 00:00:00 +0000</pubDate><guid>https://kmwtechnology.github.io/lucille/docs-0.9.0/reference/indexers/opensearch_indexer/</guid><description>&lt;p&gt;&lt;code&gt;com.kmwllc.lucille.indexer.OpenSearchIndexer&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Config block: &lt;code&gt;opensearch { ... }&lt;/code&gt;&lt;/p&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Parameter&lt;/th&gt;
 &lt;th&gt;Type&lt;/th&gt;
 &lt;th&gt;Required&lt;/th&gt;
 &lt;th&gt;Description&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;url&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;String&lt;/td&gt;
 &lt;td&gt;Yes&lt;/td&gt;
 &lt;td&gt;OpenSearch endpoint URL including credentials if needed (e.g., &lt;code&gt;https://admin:password@localhost:9200&lt;/code&gt;).&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;index&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;String&lt;/td&gt;
 &lt;td&gt;Yes&lt;/td&gt;
 &lt;td&gt;Target index name.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;update&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Boolean&lt;/td&gt;
 &lt;td&gt;No&lt;/td&gt;
 &lt;td&gt;Use the partial update API instead of index (upsert). Default: &lt;code&gt;false&lt;/code&gt;.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;acceptInvalidCert&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Boolean&lt;/td&gt;
 &lt;td&gt;No&lt;/td&gt;
 &lt;td&gt;Accept invalid TLS certificates. Default: &lt;code&gt;false&lt;/code&gt;.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Also supports &lt;code&gt;indexer.routingField&lt;/code&gt; and &lt;code&gt;indexer.versionType&lt;/code&gt; (via the generic indexer block).&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code class="language-hocon" data-lang="hocon"&gt;opensearch {
 url: &amp;#34;https://admin:admin@localhost:9200&amp;#34;
 url: ${?OPENSEARCH_URL}
 index: &amp;#34;my-index&amp;#34;
 acceptInvalidCert: true
}
&lt;/code&gt;&lt;/pre&gt;&lt;hr&gt;
&lt;h2 id="routing"&gt;Routing&lt;/h2&gt;
&lt;p&gt;When &lt;code&gt;indexer.routingField&lt;/code&gt; is set, the value of that field on each document is used as the &lt;code&gt;_routing&lt;/code&gt; parameter in the bulk request. This controls which shard receives the document. Use this when your OpenSearch index has custom shard routing configured.&lt;/p&gt;</description></item><item><title>Elasticsearch Indexer</title><link>https://kmwtechnology.github.io/lucille/docs-0.9.0/reference/indexers/elasticsearch_indexer/</link><pubDate>Mon, 09 Jun 2025 00:00:00 +0000</pubDate><guid>https://kmwtechnology.github.io/lucille/docs-0.9.0/reference/indexers/elasticsearch_indexer/</guid><description>&lt;p&gt;&lt;code&gt;com.kmwllc.lucille.indexer.ElasticsearchIndexer&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Config block: &lt;code&gt;elastic { ... }&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Supports all OpenSearch parameters, plus parent-child join support:&lt;/p&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Parameter&lt;/th&gt;
 &lt;th&gt;Type&lt;/th&gt;
 &lt;th&gt;Required&lt;/th&gt;
 &lt;th&gt;Description&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;url&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;String&lt;/td&gt;
 &lt;td&gt;Yes&lt;/td&gt;
 &lt;td&gt;Elasticsearch endpoint URL.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;index&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;String&lt;/td&gt;
 &lt;td&gt;Yes&lt;/td&gt;
 &lt;td&gt;Target index name.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;update&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Boolean&lt;/td&gt;
 &lt;td&gt;No&lt;/td&gt;
 &lt;td&gt;Use partial update API. Default: &lt;code&gt;false&lt;/code&gt;.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;acceptInvalidCert&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Boolean&lt;/td&gt;
 &lt;td&gt;No&lt;/td&gt;
 &lt;td&gt;Accept invalid TLS certs. Default: &lt;code&gt;false&lt;/code&gt;.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;parentName&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;String&lt;/td&gt;
 &lt;td&gt;No&lt;/td&gt;
 &lt;td&gt;Parent relation name for join field mappings.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;Join field support&lt;/strong&gt; (for parent-child mappings):&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code class="language-hocon" data-lang="hocon"&gt;elastic {
 url: &amp;#34;http://localhost:9200&amp;#34;
 index: &amp;#34;my-index&amp;#34;
 join: {
 joinFieldName: &amp;#34;my_join_field&amp;#34;
 isChild: true
 childName: &amp;#34;my_child&amp;#34;
 parentDocumentIdSource: &amp;#34;parent_id_field&amp;#34;
 }
}
indexer {
 type: &amp;#34;Elasticsearch&amp;#34;
 routingField: &amp;#34;routing_field&amp;#34;
}
&lt;/code&gt;&lt;/pre&gt;&lt;hr&gt;
&lt;h2 id="join-field-support-detailed"&gt;Join Field Support (Detailed)&lt;/h2&gt;
&lt;p&gt;Elasticsearch&amp;rsquo;s join field allows parent-child relationships within a single index. The ElasticsearchIndexer supports this via the &lt;code&gt;elastic.join&lt;/code&gt; config block:&lt;/p&gt;</description></item><item><title>CSV Indexer</title><link>https://kmwtechnology.github.io/lucille/docs-0.9.0/reference/indexers/csv_indexer/</link><pubDate>Mon, 09 Jun 2025 00:00:00 +0000</pubDate><guid>https://kmwtechnology.github.io/lucille/docs-0.9.0/reference/indexers/csv_indexer/</guid><description>&lt;p&gt;&lt;code&gt;com.kmwllc.lucille.indexer.CSVIndexer&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Config block: &lt;code&gt;csv { ... }&lt;/code&gt;&lt;/p&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Parameter&lt;/th&gt;
 &lt;th&gt;Type&lt;/th&gt;
 &lt;th&gt;Required&lt;/th&gt;
 &lt;th&gt;Description&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;path&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;String&lt;/td&gt;
 &lt;td&gt;Yes&lt;/td&gt;
 &lt;td&gt;Output CSV file path.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;columns&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;List&amp;lt;String&amp;gt;&lt;/td&gt;
 &lt;td&gt;Yes&lt;/td&gt;
 &lt;td&gt;Ordered list of document fields to write as columns.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;includeHeader&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Boolean&lt;/td&gt;
 &lt;td&gt;No&lt;/td&gt;
 &lt;td&gt;Write a header row. Default: &lt;code&gt;true&lt;/code&gt;.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;append&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Boolean&lt;/td&gt;
 &lt;td&gt;No&lt;/td&gt;
 &lt;td&gt;Append to an existing file. Default: &lt;code&gt;false&lt;/code&gt;.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;pre tabindex="0"&gt;&lt;code class="language-hocon" data-lang="hocon"&gt;indexer { type: &amp;#34;CSV&amp;#34; }
csv {
 path: &amp;#34;./output.csv&amp;#34;
 columns: [&amp;#34;id&amp;#34;, &amp;#34;title&amp;#34;, &amp;#34;body&amp;#34;, &amp;#34;published_at&amp;#34;]
}
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;Limitations:&lt;/strong&gt; CSVIndexer does not support &lt;code&gt;indexer.indexOverrideField&lt;/code&gt;.&lt;/p&gt;</description></item><item><title>NopIndexer (No-op)</title><link>https://kmwtechnology.github.io/lucille/docs-0.9.0/reference/indexers/nop_indexer/</link><pubDate>Mon, 09 Jun 2025 00:00:00 +0000</pubDate><guid>https://kmwtechnology.github.io/lucille/docs-0.9.0/reference/indexers/nop_indexer/</guid><description>&lt;p&gt;&lt;code&gt;com.kmwllc.lucille.indexer.NopIndexer&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Discards all documents without sending them anywhere. Useful for testing pipelines when indexing output is not needed. Equivalent to setting &lt;code&gt;indexer.sendEnabled: false&lt;/code&gt; on any other indexer.&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code class="language-hocon" data-lang="hocon"&gt;indexer { type: &amp;#34;Nop&amp;#34; }
&lt;/code&gt;&lt;/pre&gt;&lt;hr&gt;
&lt;h2 id="when-to-use"&gt;When to Use&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Testing pipeline logic&lt;/strong&gt; — Run your pipeline end-to-end without needing a search backend running.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Validating config&lt;/strong&gt; — Confirm that connectors, stages, and the indexer block are configured correctly before pointing at a real backend.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Benchmarking pipeline throughput&lt;/strong&gt; — Measure how fast your pipeline processes documents in isolation, without indexer latency as a factor.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id="equivalence-with-sendenabled-false"&gt;Equivalence with sendEnabled: false&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;NopIndexer&lt;/code&gt; and &lt;code&gt;indexer.sendEnabled: false&lt;/code&gt; on another indexer are functionally identical — both discard documents after the pipeline processes them. The difference is that NopIndexer doesn&amp;rsquo;t require configuring a backend-specific block at all:&lt;/p&gt;</description></item><item><title>Pinecone Indexer</title><link>https://kmwtechnology.github.io/lucille/docs-0.9.0/reference/indexers/pinecone_indexer/</link><pubDate>Mon, 09 Jun 2025 00:00:00 +0000</pubDate><guid>https://kmwtechnology.github.io/lucille/docs-0.9.0/reference/indexers/pinecone_indexer/</guid><description>&lt;p&gt;&lt;code&gt;com.kmwllc.lucille.pinecone.indexer.PineconeIndexer&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Indexes vector embeddings into &lt;a href="https://www.pinecone.io/"&gt;Pinecone&lt;/a&gt;. Config block: &lt;code&gt;pinecone { ... }&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Maven dependency:&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-xml" data-lang="xml"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#204a87;font-weight:bold"&gt;&amp;lt;dependency&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#204a87;font-weight:bold"&gt;&amp;lt;groupId&amp;gt;&lt;/span&gt;com.kmwllc&lt;span style="color:#204a87;font-weight:bold"&gt;&amp;lt;/groupId&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#204a87;font-weight:bold"&gt;&amp;lt;artifactId&amp;gt;&lt;/span&gt;lucille-pinecone&lt;span style="color:#204a87;font-weight:bold"&gt;&amp;lt;/artifactId&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#204a87;font-weight:bold"&gt;&amp;lt;version&amp;gt;&lt;/span&gt;${lucille.version}&lt;span style="color:#204a87;font-weight:bold"&gt;&amp;lt;/version&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#204a87;font-weight:bold"&gt;&amp;lt;/dependency&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Parameter&lt;/th&gt;
 &lt;th&gt;Type&lt;/th&gt;
 &lt;th&gt;Required&lt;/th&gt;
 &lt;th&gt;Description&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;apiKey&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;String&lt;/td&gt;
 &lt;td&gt;Yes&lt;/td&gt;
 &lt;td&gt;Pinecone API key. Use &lt;code&gt;${PINECONE_API_KEY}&lt;/code&gt; for environment variable substitution.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;index&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;String&lt;/td&gt;
 &lt;td&gt;Yes&lt;/td&gt;
 &lt;td&gt;Name of the Pinecone index to write to.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;vectorField&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;String&lt;/td&gt;
 &lt;td&gt;Yes&lt;/td&gt;
 &lt;td&gt;Document field containing the vector embedding.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;namespace&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;String&lt;/td&gt;
 &lt;td&gt;No&lt;/td&gt;
 &lt;td&gt;Pinecone namespace. Default: &lt;code&gt;&amp;quot;default&amp;quot;&lt;/code&gt;.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;pre tabindex="0"&gt;&lt;code class="language-hocon" data-lang="hocon"&gt;indexer {
 class: &amp;#34;com.kmwllc.lucille.pinecone.indexer.PineconeIndexer&amp;#34;
 deletionMarkerField: &amp;#34;is_deleted&amp;#34;
 deletionMarkerFieldValue: &amp;#34;true&amp;#34;
}

pinecone {
 apiKey: ${PINECONE_API_KEY}
 index: &amp;#34;my-index&amp;#34;
 vectorField: &amp;#34;content_vector&amp;#34;
 namespace: &amp;#34;default&amp;#34;
}
&lt;/code&gt;&lt;/pre&gt;&lt;hr&gt;
&lt;h2 id="namespace-routing"&gt;Namespace Routing&lt;/h2&gt;
&lt;p&gt;When &lt;code&gt;namespaces&lt;/code&gt; is configured, it is a map of namespace names to embedding field names. Each document is upserted into every configured namespace using the corresponding embedding field. This enables multi-vector indexing — for example, title embeddings in one namespace and body embeddings in another:&lt;/p&gt;</description></item><item><title>Weaviate Indexer</title><link>https://kmwtechnology.github.io/lucille/docs-0.9.0/reference/indexers/weaviate_indexer/</link><pubDate>Mon, 09 Jun 2025 00:00:00 +0000</pubDate><guid>https://kmwtechnology.github.io/lucille/docs-0.9.0/reference/indexers/weaviate_indexer/</guid><description>&lt;p&gt;&lt;code&gt;com.kmwllc.lucille.weaviate.indexer.WeaviateIndexer&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Indexes documents into &lt;a href="https://weaviate.io/"&gt;Weaviate&lt;/a&gt;. Config block: &lt;code&gt;weaviate { ... }&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Maven dependency:&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-xml" data-lang="xml"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#204a87;font-weight:bold"&gt;&amp;lt;dependency&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#204a87;font-weight:bold"&gt;&amp;lt;groupId&amp;gt;&lt;/span&gt;com.kmwllc&lt;span style="color:#204a87;font-weight:bold"&gt;&amp;lt;/groupId&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#204a87;font-weight:bold"&gt;&amp;lt;artifactId&amp;gt;&lt;/span&gt;lucille-weaviate&lt;span style="color:#204a87;font-weight:bold"&gt;&amp;lt;/artifactId&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#204a87;font-weight:bold"&gt;&amp;lt;version&amp;gt;&lt;/span&gt;${lucille.version}&lt;span style="color:#204a87;font-weight:bold"&gt;&amp;lt;/version&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#204a87;font-weight:bold"&gt;&amp;lt;/dependency&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Parameter&lt;/th&gt;
 &lt;th&gt;Type&lt;/th&gt;
 &lt;th&gt;Required&lt;/th&gt;
 &lt;th&gt;Description&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;apiKey&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;String&lt;/td&gt;
 &lt;td&gt;Yes&lt;/td&gt;
 &lt;td&gt;Weaviate API key for authentication. Use &lt;code&gt;${?WEAVIATE_API_KEY}&lt;/code&gt; for environment variable substitution.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;host&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;String&lt;/td&gt;
 &lt;td&gt;Yes&lt;/td&gt;
 &lt;td&gt;Weaviate instance hostname (e.g., &lt;code&gt;my-cluster.weaviate.network&lt;/code&gt;). Do not include the protocol — HTTPS is used automatically.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;className&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;String&lt;/td&gt;
 &lt;td&gt;No&lt;/td&gt;
 &lt;td&gt;The Weaviate class (object type) to create or update. Default: &lt;code&gt;&amp;quot;Document&amp;quot;&lt;/code&gt;.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;idDestinationName&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;String&lt;/td&gt;
 &lt;td&gt;No&lt;/td&gt;
 &lt;td&gt;Field name under which the document&amp;rsquo;s original Lucille ID is stored in Weaviate (since Weaviate&amp;rsquo;s &lt;code&gt;id&lt;/code&gt; field must be a UUID). Default: &lt;code&gt;&amp;quot;id_original&amp;quot;&lt;/code&gt;.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;vectorField&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;String&lt;/td&gt;
 &lt;td&gt;No&lt;/td&gt;
 &lt;td&gt;Document field containing the vector embedding to index. If omitted, no vector is sent (useful if Weaviate is configured to generate its own embeddings).&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;pre tabindex="0"&gt;&lt;code class="language-hocon" data-lang="hocon"&gt;indexer {
 class: &amp;#34;com.kmwllc.lucille.weaviate.indexer.WeaviateIndexer&amp;#34;
}

weaviate {
 apiKey: ${WEAVIATE_API_KEY}
 host: &amp;#34;my-cluster.weaviate.network&amp;#34;
 className: &amp;#34;Article&amp;#34;
 idDestinationName: &amp;#34;lucille_id&amp;#34;
 vectorField: &amp;#34;content_vector&amp;#34;
}
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;Note on IDs:&lt;/strong&gt; Weaviate requires UUIDs for its internal &lt;code&gt;id&lt;/code&gt; field. The WeaviateIndexer generates a UUID from the document&amp;rsquo;s Lucille ID and stores the original ID under &lt;code&gt;idDestinationName&lt;/code&gt; so it can be retrieved later.&lt;/p&gt;</description></item></channel></rss>