vchord_bm25
Overview
| Package | Version | Category | License | Language |
|---|---|---|---|---|
vchord_bm25 | 0.3.0 | FTS | AGPL-3.0 | Rust |
| ID | Extension | Bin | Lib | Load | Create | Trust | Reloc | Schema |
|---|---|---|---|---|---|---|---|---|
| 2150 | vchord_bm25 | No | Yes | Yes | Yes | No | No | bm25_catalog |
bm25 am conflicts with pg_textsearch and pg_search, build require clang upgrade.
Version
| Type | Repo | Version | PG Ver | Package | Deps |
|---|---|---|---|---|---|
| EXT | PIGSTY | 0.3.0 | 1817161514 | vchord_bm25 | - |
| RPM | PIGSTY | 0.3.0 | 1817161514 | vchord_bm25_$v | - |
| DEB | PIGSTY | 0.3.0 | 1817161514 | postgresql-$v-vchord-bm25 | - |
Build
You can build the RPM / DEB packages for vchord_bm25 using pig build:
Install
You can install vchord_bm25 directly. First, make sure the PGDG and PIGSTY repositories are added and enabled:
Install the extension using pig or apt/yum/dnf:
Preload:
Create Extension:
Usage
VectorChord-BM25 is a PostgreSQL extension for the BM25 ranking algorithm, implemented via Block-WeakAnd algorithms. It is designed to work together with pg_tokenizer for customized text tokenization.
Architecture
The extension comprises three main components:
- Tokenizer: Converts text into
bm25vector(sparse vectors storing vocabulary IDs and term frequencies) - bm25vector: A custom data type for storing tokenized text
- bm25vector indexes: Accelerate search and ranking operations
Quick Start
Note: BM25 scores in VectorChord-BM25 are negative, with more negative scores indicating greater relevance.
The <&> Operator
The <&> operator computes the BM25 relevance score between a stored bm25vector and a query bm25vector. Queries must be wrapped in to_bm25query() which takes the index name and the tokenized query:
Language Support
VectorChord-BM25 supports multiple languages through different tokenizer configurations:
| Language | Approach | Model/Pre-tokenizer |
|---|---|---|
| English | Pre-trained model | model = "llmlingua2" or model = "bert_base_uncased" |
| Chinese | Custom model with Jieba pre-tokenizer | [pre_tokenizer.jieba] |
| Japanese | Custom model with Lindera pre-tokenizer | Lindera with IPADIC dictionary |
| Custom | User-trained models via text analyzers | create_custom_model_tokenizer_and_trigger() |
Chinese Text Search Example
Chinese text requires a custom model with a Jieba pre-tokenizer (not a pre-trained model):
Custom Tokenizer Models
For domain-specific terminology, you can create text analyzers with stopwords, stemming, and other filters, then train custom models on your corpus using create_custom_model_tokenizer_and_trigger().
Comparison with Alternatives
| Feature | VectorChord-BM25 | PostgreSQL tsvector + ts_rank |
|---|---|---|
| Ranking algorithm | BM25 | tf-idf variant |
| Custom tokenizers | Yes (via pg_tokenizer) | Limited to built-in configs |
| Index type | Dedicated BM25 index | GIN index |
| Native PostgreSQL | Yes (extension) | Built-in |
| Language support | Extensible via models | Via text search configs |
Was this page helpful?
Thanks—your feedback helps us improve this page.
What got in the way? (optional)