REST - /v1/schema
From v1.5.0
onwards, creating a schema is optional. Learn more about Auto Schema.
Get the schemaโ
Dumps the current Weaviate schema. The result contains an array of objects.
Method and URLโ
GET /v1/schema
Example requestโ
- Python
- JavaScript
- TypeScript
- Go
- Java
- Curl
import weaviate
client = weaviate.Client("http://localhost:8080")
schema = client.schema.get()
print(schema)
const weaviate = require('weaviate-ts-client');
const client = weaviate.client({
scheme: 'http',
host: 'localhost:8080',
});
client
.schema
.getter()
.do()
.then(res => {
console.log(res);
})
.catch(err => {
console.error(err)
});
import weaviate, { WeaviateClient } from 'weaviate-ts-client';
const client: WeaviateClient = weaviate.client({
scheme: 'http',
host: 'localhost:8080',
});
client
.schema
.getter()
.do()
.then((res: any) => {
console.log(res)
})
.catch((err: Error) => {
console.error(err)
});
package main
import (
"context"
"fmt"
"github.com/weaviate/weaviate-go-client/v4/weaviate"
)
func main() {
cfg := weaviate.Config{
Host: "localhost:8080",
Scheme: "http",
}
client, err := weaviate.NewClient(cfg)
if err != nil {
panic(err)
}
schema, err := client.Schema().Getter().Do(context.Background())
if err != nil {
panic(err)
}
fmt.Printf("%v", schema)
}
package io.weaviate;
import io.weaviate.client.Config;
import io.weaviate.client.WeaviateClient;
import io.weaviate.client.base.Result;
import io.weaviate.client.v1.schema.model.Schema;
public class App {
public static void main(String[] args) {
Config config = new Config("http", "localhost:8080");
WeaviateClient client = new WeaviateClient(config);
Result<Schema> result = client.schema().getter().run();
if (result.hasErrors()) {
System.out.println(result.getError());
return;
}
System.out.println(result.getResult());
}
}
$ curl http://localhost:8080/v1/schema
Example responseโ
{
"classes": [
{
"class": "Category",
"description": "Category an article is a type off",
"moduleConfig": {
"text2vec-contextionary": {
"vectorizeClassName": false
}
},
"properties": [
{
"dataType": [
"text"
],
"description": "category name",
"indexFilterable": true,
"indexSearchable": true,
"moduleConfig": {
"text2vec-contextionary": {
"vectorizePropertyName": false
}
},
"name": "name"
}
],
"vectorIndexType": "hnsw",
"vectorizer": "none"
},
{
"class": "Publication",
"description": "A publication with an online source",
"moduleConfig": {
"text2vec-contextionary": {
"vectorizeClassName": false
}
},
"properties": [
{
"dataType": [
"text"
],
"description": "Name of the publication",
"name": "name"
},
{
"dataType": [
"geoCoordinates"
],
"description": "Geo location of the HQ",
"name": "headquartersGeoLocation"
},
{
"dataType": [
"Article"
],
"description": "The articles this publication has",
"name": "hasArticles"
},
{
"dataType": [
"Article"
],
"description": "Articles this author wrote",
"name": "wroteArticles"
}
],
"vectorIndexType": "hnsw",
"vectorizer": "none"
},
{
"class": "Author",
"description": "Normalised types",
"moduleConfig": {
"text2vec-contextionary": {
"vectorizeClassName": true
}
},
"properties": [
{
"dataType": [
"text"
],
"description": "Name of the author",
"name": "name"
},
{
"dataType": [
"Publication"
],
"description": "The publication this author writes for",
"name": "writesFor"
}
],
"vectorIndexType": "hnsw",
"vectorizer": "none"
},
{
"class": "Article",
"description": "Normalised types",
"moduleConfig": {
"text2vec-contextionary": {
"vectorizeClassName": false
}
},
"properties": [
{
"dataType": [
"text"
],
"description": "title of the article",
"indexFilterable": true,
"indexSearchable": true,
"moduleConfig": {
"text2vec-contextionary": {
"vectorizePropertyName": false
}
},
"name": "title"
},
{
"dataType": [
"text"
],
"description": "url of the article",
"indexFilterable": true,
"indexSearchable": false,
"moduleConfig": {
"text2vec-contextionary": {
"vectorizePropertyName": false
}
},
"name": "url"
},
{
"dataType": [
"text"
],
"description": "summary of the article",
"indexFilterable": true,
"indexSearchable": true,
"moduleConfig": {
"text2vec-contextionary": {
"vectorizePropertyName": false
}
},
"name": "summary"
},
{
"dataType": [
"date"
],
"description": "date of publication of the article",
"name": "publicationDate"
},
{
"dataType": [
"int"
],
"description": "Words in this article",
"name": "wordCount"
},
{
"dataType": [
"Author",
"Publication"
],
"description": "authors this article has",
"name": "hasAuthors"
},
{
"dataType": [
"Publication"
],
"description": "publication this article is in",
"name": "inPublication"
},
{
"dataType": [
"Category"
],
"description": "category this article is of",
"name": "ofCategory"
},
{
"dataType": [
"boolean"
],
"description": "whether the article is currently accessible through the url",
"name": "isAccessible"
}
],
"vectorIndexType": "hnsw",
"vectorizer": "none"
}
]
}
Create a classโ
Create a new data object class in the schema.
From v1.5.0
onwards, creating a schema is optional. Learn more about Auto Schema.
Method and URLโ
POST /v1/schema
Parametersโ
Learn more about the schema configuration here.
Name | Location | Type | Description |
---|---|---|---|
class | body | string | The name of the class. Multiple words should be concatenated in CamelCase, e.g. ArticleAuthor . |
description | body | string | Description of the class. |
vectorIndexType | body | string | Defaults to hnsw. Can be omitted in schema definition since this is the only available type for now. |
vectorIndexConfig | body | object | Vector index type specific settings. |
vectorizer | body | string | Vectorizer to use for data objects added to this class. Default can be set via Weaviate environment variables. |
moduleConfig > text2vec-contextionary > vectorizeClassName | body | object | Include the class name in vector calculation (default true). Learn more about semantic indexing in Weaviate. |
properties | body | array | An array of property objects. |
properties > dataType | body | array | See the available data types. |
properties > description | body | string | Description of the property. |
properties > moduleConfig > text2vec-contextionary > skip | body | boolean | If true, the whole property will NOT be included in vectorization. Default is false, meaning that the object will be NOT be skipped. |
properties > moduleConfig > text2vec-contextionary > vectorizePropertyName | body | boolean | Whether the name of the property is used in the calculation for the vector position of data objects. Default is true. Learn more about semantic indexing in Weaviate. |
properties > name | body | string | The name of the property. Multiple words should be concatenated in camelCase, e.g. nameOfAuthor . |
properties > indexFilterable (available from v1.19 ) | body | boolean | Should the data stored in this property be indexed with the filterable, Roaring Bitmap index? Read more about indexing in Weaviate. |
properties > indexSearchable (available from v1.19 ) | body | boolean | Should the data stored in this property be indexed to allow BM25/hybrid-search index? Read more on how to configure indexing in Weaviate. |
properties > indexInverted (deprecated) | body | boolean | Should the data stored in this property be indexed? Learn more about indexing in Weaviate. |
properties > tokenization | body | string | Only for string /text props. Introduced in v1.12.0 . Control how a field is tokenized in the inverted index. Defaults to "word" , can be set to "field" . Learn more about property tokenization. |
invertedIndexConfig > stopwords | body | object | Configure which words should be treated as stopwords and therefore be ignored on querying (stopwords are still indexed). Since v1.18 , stopwords can be configured at runtime.See more details here. |
invertedIndexConfig > indexTimestamps | body | boolean | Maintain an inverted index for each object by its internal timestamps, currently including creationTimeUnix and lastUpdateTimeUnix .See more details here. |
replicationConfig > factor | body | int | The replication factor, aka the number of copies in a replicated Weaviate setup. |
Example request for creating a classโ
- Python
- JavaScript
- Go
- Java
- Curl
import weaviate
client = weaviate.Client("http://localhost:8080")
class_obj = {
"class": "Article",
"description": "A written text, for example a news article or blog post",
"properties": [
{
"dataType": ["text"],
"description": "Title of the article",
"name": "title",
},
{
"dataType": ["text"],
"description": "The content of the article",
"name": "content"
}
]
}
client.schema.create_class(class_obj)
const weaviate = require('weaviate-client');
const client = weaviate.client({
scheme: 'http',
host: 'localhost:8080',
});
let classObj = {
'class': 'Article',
'description': 'A written text, for example a news article or blog post',
'vectorizeClassName': true,
'properties': [
{
'name': 'title',
'dataType': [ 'string' ],
'description': 'Title of the article',
'vectorizePropertyName': true,
'index': true
},
{
'name': 'content',
'dataType': [ 'text' ],
'description': 'The content of the article'
}
]
}
client
.schema
.classCreator()
.withClass(classObj)
.do()
.then(res => {
console.log(res)
})
.catch(err => {
console.error(err)
});
package main
import (
"context"
"github.com/weaviate/weaviate-go-client/v4/weaviate"
"github.com/weaviate/weaviate/entities/models"
)
func main() {
cfg := weaviate.Config{
Host: "localhost:8080",
Scheme: "http",
}
client, err := weaviate.NewClient(cfg)
if err != nil {
panic(err)
}
classObj := &models.Class{
Class: "Article",
Description: "A written text, for example a news article or blog post",
Properties: []*models.Property{
{
DataType: []string{"string"},
Description: "Title of the article",
Name: "title",
},
{
DataType: []string{"text"},
Description: "The content of the article",
Name: "content",
},
},
}
err := client.Schema().ClassCreator().WithClass(classObj).Do(context.Background())
if err != nil {
panic(err)
}
}
package io.weaviate;
import java.util.ArrayList;
import io.weaviate.client.Config;
import io.weaviate.client.WeaviateClient;
import io.weaviate.client.base.Result;
import io.weaviate.client.v1.schema.model.DataType;
import io.weaviate.client.v1.schema.model.Property;
import io.weaviate.client.v1.schema.model.WeaviateClass;
public class App {
public static void main(String[] args) {
Config config = new Config("http", "localhost:8080");
WeaviateClient client = new WeaviateClient(config);
WeaviateClass clazz = WeaviateClass.builder()
.className("Article")
.description("A written text, for example a news article or blog post")
.properties(new ArrayList() { {
add(Property.builder()
.dataType(new ArrayList(){ { add(DataType.STRING); } })
.description("Title of the article")
.name("title")
.build());
add(Property.builder()
.dataType(new ArrayList(){ { add(DataType.TEXT); } })
.description("The content of the article")
.name("content")
.build());
} })
.build();
Result<Boolean> result = client.schema().classCreator().withClass(clazz).run();
if (result.hasErrors()) {
System.out.println(result.getError());
return;
}
System.out.println(result.getResult());
}
}
$ curl \
-X POST \
-H "Content-Type: application/json" \
-d '{
"class": "Article",
"description": "A written text, for example a news article or blog post",
"properties": [
{
"dataType": [
"string"
],
"description": "Title of the article",
"name": "title"
},
{
"dataType": [
"text"
],
"description": "The content of the article",
"name": "content"
}
]
}' \
http://localhost:8080/v1/schema
Or with all the possible parameters:
- Python
- JavaScript
- Go
- Java
- Curl
import weaviate
client = weaviate.Client("http://localhost:8080")
class_obj = {
"class": "Article",
"description": "A written text, for example a news article or blog post",
"vectorIndexType": "hnsw",
"vectorIndexConfig": {
"distance": "cosine",
"efConstruction": 128,
"maxConnections": 64
},
"vectorizer": "text2vec-contextionary",
"moduleConfig": {
"text2vec-contextionary": {
"vectorizeClassName": True
}
},
"properties": [
{
"dataType": [
"text"
],
"description": "Title of the article",
"name": "title",
"indexInverted": True,
"moduleConfig": {
"text2vec-contextionary": {
"skip": False,
"vectorizePropertyName": False
}
}
},
{
"dataType": [
"text"
],
"description": "The content of the article",
"name": "content",
"indexInverted": True,
"moduleConfig": {
"text2vec-contextionary": {
"skip": False,
"vectorizePropertyName": False
}
}
}
],
"shardingConfig": {
"virtualPerPhysical": 128,
"desiredCount": 1,
"desiredVirtualCount": 128,
"key": "_id",
"strategy": "hash",
"function": "murmur3"
},
"invertedIndexConfig": {
"stopwords": {
"preset": "en",
"additions": ["star", "nebula"],
"removals": ["a", "the"]
},
"indexTimestamps": True
},
"replicationConfig": {
"factor": 3
}
}
client.schema.create_class(class_obj)
const weaviate = require('weaviate-client');
const client = weaviate.client({
scheme: 'http',
host: 'localhost:8080',
});
let classObj = {
'class': 'Article',
'description': 'A written text, for example a news article or blog post',
'vectorIndexType': 'hnsw',
'vectorIndexConfig': {
'distance': 'cosine',
'efConstruction': 128,
'maxConnections': 64
},
'vectorizer': 'text2vec-contextionary',
'moduleConfig': {
'text2vec-contextionary': {
'vectorizeClassName': true
}
},
'properties': [
{
'dataType': [
'text'
],
'description': 'Title of the article',
'name': 'title',
'indexInverted': true,
'moduleConfig': {
'text2vec-contextionary': {
'skip': false,
'vectorizePropertyName': false
}
}
},
{
'dataType': [
'text'
],
'description': 'The content of the article',
'name': 'content',
'indexInverted': true,
'moduleConfig': {
'text2vec-contextionary': {
'skip': false,
'vectorizePropertyName': false
}
}
}
],
'shardingConfig': {
'virtualPerPhysical': 128,
'desiredCount': 1,
'desiredVirtualCount': 128,
'key': '_id',
'strategy': 'hash',
'function': 'murmur3'
},
'invertedIndexConfig': {
'stopwords': {
'preset': 'en',
'additions': ['star', 'nebula'],
'removals': ['a', 'the']
},
'indexTimestamps': true
},
'replicationConfig': {
'factor': 3
}
}
client
.schema
.classCreator()
.withClass(classObj)
.do()
.then(res => {
console.log(res)
})
.catch(err => {
console.error(err)
});
package main
import (
"context"
"github.com/weaviate/weaviate-go-client/v4/weaviate"
"github.com/weaviate/weaviate/entities/models"
)
func main() {
cfg := weaviate.Config{
Host: "localhost:8080",
Scheme: "http",
}
client, err := weaviate.NewClient(cfg)
if err != nil {
panic(err)
}
classObj := &models.Class{
Class: "Article",
Description: "A written text, for example a news article or blog post",
VectorIndexType: "hnsw",
Vectorizer: "text2vec-contextionary",
VectorIndexConfig: map[string]interface{}{
"distance": "cosine",
"ef": float64(128),
"efConstruction": float64(128),
"maxConnections": float64(32),
},
Properties: []*models.Property{
{
DataType: []string{"text"},
Description: "Title of the article",
Name: "title",
},
{
DataType: []string{"text"},
Description: "The content of the article",
Name: "content",
},
},
InvertedIndexConfig: &models.InvertedIndexConfig{
Stopwords: &models.StopwordConfig{
Preset: "en",
Additions: []string{"star", "nebula"},
Removals: []string{"a", "the"},
},
IndexTimestamps: true,
},
ReplicationConfig: &models.ReplicationConfig{
Factor: 3,
}
}
err := client.Schema().ClassCreator().WithClass(classObj).Do(context.Background())
if err != nil {
panic(err)
}
}
package io.weaviate;
import java.util.ArrayList;
import io.weaviate.client.Config;
import io.weaviate.client.WeaviateClient;
import io.weaviate.client.base.Result;
import io.weaviate.client.v1.misc.model.InvertedIndexConfig;
import io.weaviate.client.v1.misc.model.ShardingConfig;
import io.weaviate.client.v1.misc.model.StopwordConfig;
import io.weaviate.client.v1.misc.model.VectorIndexConfig;
import io.weaviate.client.v1.schema.model.DataType;
import io.weaviate.client.v1.schema.model.Property;
import io.weaviate.client.v1.schema.model.WeaviateClass;
import io.weaviate.client.v1.misc.model.ReplicationConfig;
public class App {
public static void main(String[] args) {
Config config = new Config("http", "localhost:8080");
WeaviateClient client = new WeaviateClient(config);
StopwordConfig stopwordConfig = StopwordConfig.builder()
.preset("en")
.additions(new String[]{ "star", "nebula" })
.removals(new String[]{ "a", "the" })
.build();
InvertedIndexConfig invertedIndexConfig = InvertedIndexConfig.builder()
.stopwords(stopwordConfig)
.indexTimestamps(true)
.build();
VectorIndexConfig vectorIndexConfig = VectorIndexConfig.builder()
.distance("cosine")
.cleanupIntervalSeconds(300)
.efConstruction(128)
.maxConnections(64)
.vectorCacheMaxObjects(500000)
.ef(-1)
.skip(false)
.dynamicEfFactor(8)
.dynamicEfMax(500)
.dynamicEfMin(100)
.flatSearchCutoff(40000)
.build();
ShardingConfig shardingConfig = ShardingConfig.builder()
.desiredCount(1)
.desiredVirtualCount(128)
.function("murmur3")
.key("_id")
.strategy("hash")
.virtualPerPhysical(128)
.build();
ReplicationConfig replicationConfig = ReplicationConfig.builder()
.factor(3)
.build();
WeaviateClass clazz = WeaviateClass.builder()
.className("Article")
.description("A written text, for example a news article or blog post")
.vectorIndexType("hnsw")
.vectorizer("text2vec-contextionary")
.invertedIndexConfig(invertedIndexConfig)
.shardingConfig(shardingConfig)
.vectorIndexConfig(vectorIndexConfig)
.replicationConfig(replicationConfig)
.properties(new ArrayList() { {
add(Property.builder()
.dataType(new ArrayList(){ { add(DataType.TEXT); } })
.description("Title of the article")
.name("title")
.build());
add(Property.builder()
.dataType(new ArrayList(){ { add(DataType.TEXT); } })
.description("The content of the article")
.name("content")
.build());
} })
.build();
Result<Boolean> result = client.schema().classCreator().withClass(clazz).run();
if (result.hasErrors()) {
System.out.println(result.getError());
return;
}
System.out.println(result.getResult());
}
}
$ curl \
-X POST \
-H "Content-Type: application/json" \
-d '{
"class": "Article",
"description": "A written text, for example a news article or blog post",
"vectorIndexType": "hnsw",
"vectorIndexConfig": {
"distance": "cosine",
"efConstruction": 128,
"maxConnections": 64
},
"vectorizer": "text2vec-contextionary",
"moduleConfig": {
"text2vec-contextionary": {
"vectorizeClassName": true
}
},
"properties": [
{
"dataType": [
"text"
],
"description": "Title of the article",
"name": "title",
"indexInverted": true,
"moduleConfig": {
"text2vec-contextionary": {
"skip": false,
"vectorizePropertyName": true
}
}
},
{
"dataType": [
"text"
],
"description": "The content of the article",
"name": "content",
"indexInverted": true,
"moduleConfig": {
"text2vec-contextionary": {
"skip": false,
"vectorizePropertyName": true
}
}
}
],
"shardingConfig": {
"virtualPerPhysical": 128,
"desiredCount": 1,
"desiredVirtualCount": 128,
"key": "_id",
"strategy": "hash",
"function": "murmur3"
},
"invertedIndexConfig": {
"stopwords": {
"preset": "en",
"additions": ["star", "nebula"],
"removals": ["a", "the"]
},
"indexTimestamps": true
},
"replicationConfig": {
"factor": 3
}
}' \
http://localhost:8080/v1/schema
Get a single class from the schemaโ
Retrieves the configuration of a single class in the schema.
Method and URLโ
GET /v1/schema/{ClassName}
Example requestโ
- Python
- JavaScript
- Go
- Java
- Curl
import weaviate
client = weaviate.Client("http://localhost:8080")
schema = client.schema.get("Article")
print(schema)
const weaviate = require('weaviate-client');
const client = weaviate.client({
scheme: 'http',
host: 'localhost:8080',
});
var className = 'Article';
client
.schema
.classGetter()
.withClassName(className)
.do()
.then(res => {
console.log(res);
})
.catch(err => {
console.error(err)
});
package main
import (
"context"
"fmt"
"github.com/weaviate/weaviate-go-client/v4/weaviate"
)
func main() {
cfg := weaviate.Config{
Host: "localhost:8080",
Scheme: "http",
}
client, err := weaviate.NewClient(cfg)
if err != nil {
panic(err)
}
schema, err := client.Schema().ClassGetter().WithClassName("Article").Do(context.Background())
if err != nil {
panic(err)
}
fmt.Printf("%v", schema)
}
package io.weaviate;
import io.weaviate.client.Config;
import io.weaviate.client.WeaviateClient;
import io.weaviate.client.base.Result;
import io.weaviate.client.v1.schema.model.Schema;
public class App {
public static void main(String[] args) {
Config config = new Config("http", "localhost:8080");
WeaviateClient client = new WeaviateClient(config);
Result<Schema> result = client.schema().classGetter().withClassName("Article").run();
if (result.hasErrors()) {
System.out.println(result.getError());
return;
}
System.out.println(result.getResult());
}
}
$ curl http://localhost:8080/v1/schema/Article
Delete a classโ
Remove a class (and all data in the instances) from the schema.
Method and URLโ
DELETE v1/schema/{class_name}
URL parametersโ
Name | Location | Type | Description |
---|---|---|---|
{class_name} | path | string | The name of the class |
Example request for deleting a classโ
- Python
- JavaScript
- Go
- Java
- Curl
import weaviate
client = weaviate.Client("http://localhost:8080")
client.schema.delete_class("Article") # deletes the class "Article" along with all data points of class "Article"
# OR
client.schema.delete_all() # deletes all classes along with the whole data
const weaviate = require('weaviate-client');
const client = weaviate.client({
scheme: 'http',
host: 'localhost:8080',
});
var className = 'Article';
client.schema
.classDeleter()
.withClassName(className)
.do()
.then(res => {
console.log(res);
})
.catch(err => {
console.error(err)
});
package main
import (
"context"
"github.com/weaviate/weaviate-go-client/v4/weaviate"
)
func main() {
cfg := weaviate.Config{
Host: "localhost:8080",
Scheme: "http",
}
client, err := weaviate.NewClient(cfg)
if err != nil {
panic(err)
}
err := client.Schema().ClassDeleter().
WithClassName("Article").
Do(context.Background())
if err != nil {
panic(err)
}
}
package io.weaviate;
import io.weaviate.client.Config;
import io.weaviate.client.WeaviateClient;
import io.weaviate.client.base.Result;
public class App {
public static void main(String[] args) {
Config config = new Config("http", "localhost:8080");
WeaviateClient client = new WeaviateClient(config);
Result<Boolean> result = client.schema().classDeleter()
.withClassName("Article")
.run();
if (result.hasErrors()) {
System.out.println(result.getError());
return;
}
System.out.println(result.getResult());
}
}
$ curl -X DELETE http://localhost:8080/v1/schema/Article
Update a classโ
Update settings of an existing schema class.
Use this endpoint to alter an existing class in the schema. Note that not all settings are mutable. If an error about immutable fields is returned and you still need to update this particular setting, you will have to delete the class (and the underlying data) and recreate. This endpoint cannot be used to modify properties. Instead, use POST /v1/schema/{ClassName}/properties
. A typical use case for this endpoint is to update configuration, such as the vectorIndexConfig
. Note that even in mutable sections, such as vectorIndexConfig
, some fields may be immutable.
You should attach a body to this PUT request with the entire new configuration of the class.
Method and URLโ
PUT v1/schema/{class_name}
Parametersโ
The URL must contain the following parameter:
Name | Location | Type | Description |
---|---|---|---|
{class_name} | path | string | The name of the class |
Parameters in the PUT body:
Name | Location | Type | Description |
---|---|---|---|
class | body | string | The name of the class. Multiple words should be concatenated in CamelCase, e.g. ArticleAuthor . |
description | body | string | Description of the class. |
vectorIndexType | body | string | Defaults to hnsw. Can be omitted in schema definition since this is the only available type for now. |
vectorIndexConfig | body | object | Vector index type specific settings. |
vectorizer | body | string | Vectorizer to use for data objects added to this class. Default can be set via Weaviate environment variables. |
moduleConfig > text2vec-contextionary > vectorizeClassName | body | object | Include the class name in vector calculation (default true). Learn more about how to configure indexing in Weaviate. |
properties | body | array | An array of property objects. |
properties > dataType | body | array | See the available data types |
properties > description | body | string | Description of the property. |
properties > moduleConfig > text2vec-contextionary > skip | body | boolean | If true, the whole property will NOT be included in vectorization. Default is false, meaning that the object will be NOT be skipped. |
properties > moduleConfig > text2vec-contextionary > vectorizePropertyName | body | boolean | Whether the name of the property is used in the calculation for the vector position of data objects. Default is true. Learn more about how to configure indexing in Weaviate. |
properties > name | body | string | The name of the property. Multiple words should be concatenated in camelCase, e.g. nameOfAuthor . |
properties > indexFilterable (available from v1.19 ) | body | boolean | Should the data stored in this property be indexed with the filterable, Roaring Bitmap index? Read more about indexing in Weaviate. |
properties > indexSearchable (available from v1.19 ) | body | boolean | Should the data stored in this property be indexed to allow BM25/hybrid-search index? Read more about indexing in Weaviate. |
properties > indexInverted (deprecated) | body | boolean | Should the data stored in this property be indexed? Learn more about indexing in Weaviate. |
properties > tokenization | body | string | Only for string /text props. Introduced in v1.12.0 . Control how a field is tokenized in the inverted index. Defaults to "word" . If string is used, can be set to "field" . Learn more about property tokenization. |
invertedIndexConfig > stopwords | body | object | Configure which words should be treated as stopwords and therefore be ignored when querying (stopwords are still indexed). Since v1.18 , stopwords can be configured at runtime.See more details here. |
invertedIndexConfig > indexTimestamps | body | boolean | Maintain an inverted index for each object by its internal timestamps, currently including creationTimeUnix and lastUpdateTimeUnix See more details here. |
Example request for updating a classโ
- Python
- Curl
import weaviate
client = weaviate.Client("http://localhost:8080")
class_obj = {
"class": "Article",
"description": "A written text, for example a news article or blog post",
"properties": [
{
"dataType": [
"string"
],
"description": "Title of the article",
"name": "title",
},
{
"dataType": [
"text"
],
"description": "The content of the article",
"name": "content"
}
]
}
client.schema.update_config("Article", class_obj)
$ curl \
-X PUT \
-H "Content-Type: application/json" \
-d '{
"class": "Article",
"description": "A written text, for example a news article or blog post",
"properties": [
{
"dataType": [
"string"
],
"description": "Title of the article",
"name": "title"
},
{
"dataType": [
"text"
],
"description": "The content of the article",
"name": "content"
}
]
}' \
http://localhost:8080/v1/schema/Article
Add a propertyโ
Method and URLโ
POST v1/schema/{class_name}/properties
Parametersโ
Name | Location | Type | Description |
---|---|---|---|
dataType | body | array | An available data type. |
description | body | string | Description of the property. |
moduleConfig > text2vec-contextionary > skip | body | boolean | If true, the whole property will NOT be included in vectorization. Default is false, meaning that the object will be NOT be skipped. |
moduleConfig > text2vec-contextionary > vectorizePropertyName | body | boolean | Whether the name of the property is used in the calculation for the vector position of data objects. Default is true. Learn more about how to configure indexing in Weaviate. |
name | body | string | The name of the property. Multiple words should be concatenated in camelCase like nameOfAuthor . |
indexFilterable (available from v1.19 ) | body | boolean | Should the data stored in this property be indexed with the filterable, Roaring Bitmap index? Read more about indexing in Weaviate. |
indexSearchable (available from v1.19 ) | body | boolean | Should the data stored in this property be indexed to allow BM25/hybrid-search index? Read more about indexing in Weaviate. |
indexInverted (deprecated) | body | boolean | Should the data stored in this property be indexed? Learn more about indexing in Weaviate. |
Example request for adding a propertyโ
- Python
- JavaScript
- Go
- Java
- Curl
import weaviate
client = weaviate.Client("http://localhost:8080")
add_prop = {
"dataType": [
"boolean"
],
"name": "onHomepage"
}
client.schema.property.create("Article", add_prop)
const weaviate = require('weaviate-client');
const client = weaviate.client({
scheme: 'http',
host: 'localhost:8080',
});
const className = 'Article';
const prop = {
dataType: ['boolean'],
name: 'onHomepage',
};
client.schema
.propertyCreator()
.withClassName(className)
.withProperty(prop)
.do()
.then(res => {
console.log(res);
})
.catch(err => {
console.error(err)
});
package main
import (
"context"
"github.com/weaviate/weaviate-go-client/v4/weaviate"
"github.com/weaviate/weaviate/entities/models"
)
func main() {
cfg := weaviate.Config{
Host: "localhost:8080",
Scheme: "http",
}
client, err := weaviate.NewClient(cfg)
if err != nil {
panic(err)
}
prop := &models.Property{
DataType: []string{"boolean"},
Name: "onHomepage",
}
err := client.Schema().PropertyCreator().
WithClassName("Article").
WithProperty(prop).
Do(context.Background())
if err != nil {
panic(err)
}
}
package io.weaviate;
import java.util.Arrays;
import io.weaviate.client.Config;
import io.weaviate.client.WeaviateClient;
import io.weaviate.client.base.Result;
import io.weaviate.client.v1.schema.model.DataType;
import io.weaviate.client.v1.schema.model.Property;
public class App {
public static void main(String[] args) {
Config config = new Config("http", "localhost:8080");
WeaviateClient client = new WeaviateClient(config);
Property property = Property.builder()
.dataType(Arrays.asList(DataType.BOOLEAN))
.name("onHomepage")
.build();
Result<Boolean> result = client.schema().propertyCreator()
.withClassName("Article")
.withProperty(property)
.run();
if (result.hasErrors()) {
System.out.println(result.getError());
return;
}
System.out.println(result.getResult());
}
}
$ curl \
-X POST \
-H "Content-Type: application/json" \
-d '{
"dataType": [
"boolean"
],
"name": "onHomepage"
}' \
http://localhost:8080/v1/schema/Article/properties
Inspect the shards of a classโ
As described in Architecture > Storage, creation of a class leads to creating an index which manages all the disk storage and vector indexing. An index itself can be comprised of multiple shards. If a class index is used on multiple nodes of a multi-node Weaviate cluster there must be at least one shard per node.
You can view a list of all shards for a particular class:
Method and URLโ
This API was added in v1.12.0
.
GET v1/schema/{class_name}/shards
Parametersโ
Name | Location | Type | Description |
---|---|---|---|
{class_name} | URL path | string | The name of the class |
Example request viewing shards of a classโ
- Python
- JavaScript
- Go
- Java
- Curl
import weaviate
client = weaviate.Client("http://localhost:8080")
client.schema.get_class_shards("Article")
const weaviate = require('weaviate-client');
const client = weaviate.client({
scheme: 'http',
host: 'localhost:8080',
});
client.schema
.shardsGetter()
.withClassName('Article')
.do()
package main
import (
"context"
"fmt"
"github.com/weaviate/weaviate-go-client/v4/weaviate"
)
func main() {
cfg := weaviate.Config{
Host: "localhost:8080",
Scheme: "http",
}
client, err := weaviate.NewClient(cfg)
if err != nil {
panic(err)
}
shards, err := client.Schema().
ShardsGetter().
WithClassName("Article").
Do(context.Background())
if err != nil {
panic(err)
}
fmt.Printf("%v", shards)
}
package io.weaviate;
import io.weaviate.client.Config;
import io.weaviate.client.WeaviateClient;
import io.weaviate.client.base.Result;
import io.weaviate.client.v1.schema.model.Shard;
public class App {
public static void main(String[] args) {
Config config = new Config("http", "localhost:8080");
WeaviateClient client = new WeaviateClient(config);
Result<Shard[]> result = client.schema()
.shardsGetter()
.withClassName("Article")
.run()
if (result.hasErrors()) {
System.out.println(result.getError());
return;
}
System.out.println(result.getResult());
}
}
$ curl \
http://localhost:8080/v1/schema/Article/shards
Update shard statusโ
A shard may have been marked as read-only, for example because the disk was full. You can manually set a shard to READY
again using the following API. There is also a convenience function in each client to set the status of all shards of a class.
Method and URLโ
This API was added in v1.12.0
PUT v1/schema/{class_name}/shards/{shard_name}
Parametersโ
Name | Location | Type | Description |
---|---|---|---|
{class_name} | URL path | string | The name of the class. |
{shard_name} | URL path | string | The name/id of the shard. |
status | body | string | The status to update the shard to. One of READONLY , READY . |
Example requests to update the status of a shardโ
- Python
- JavaScript
- Go
- Java
- Curl
import weaviate
client = weaviate.Client("http://localhost:8080")
# Update a shard
client.schema.update_class_shard(
class_name="Article",
status="READONLY",
shard_name="shard-1234",
)
# Convenience method to update all shards in a class
client.schema.update_class_shard(
class_name="Article",
status="READONLY",
)
const weaviate = require('weaviate-client');
const client = weaviate.client({
scheme: 'http',
host: 'localhost:8080',
});
// Update a shard
client.schema
.shardUpdater()
.withClassName('Article')
.withShardName('shard-1234')
.withStatus('READONLY')
.do()
// Convenience method to update all shards in a class
client.schema
.shardsUpdater()
.withClassName("Article")
.withStatus("READONLY")
.do()
package main
import (
"context"
"fmt"
"github.com/weaviate/weaviate-go-client/v4/weaviate"
)
func main() {
cfg := weaviate.Config{
Host: "localhost:8080",
Scheme: "http",
}
client, err := weaviate.NewClient(cfg)
if err != nil {
panic(err)
}
// Update a shard
status, err := client.Schema().
ShardUpdater().
WithClassName("Article").
WithShardName("shard-1234").
WithStatus("READONLY").
Do(context.Background())
if err != nil {
panic(err)
}
fmt.Printf("%v", status)
// Convenience method to update all shards in a class
shards, err := client.Schema().
ShardsUpdater().
WithClassName("Article").
WithStatus("READY").
Do(context.Background())
if err != nil {
panic(err)
}
fmt.Printf("%v", shards)
}
package io.weaviate;
import io.weaviate.client.Config;
import io.weaviate.client.WeaviateClient;
import io.weaviate.client.base.Result;
import io.weaviate.client.v1.schema.model.ShardStatus;
import io.weaviate.client.v1.schema.model.ShardStatuses;
public class App {
public static void main(String[] args) {
Config config = new Config("http", "localhost:8080");
WeaviateClient client = new WeaviateClient(config);
// Update a shard
Result<ShardStatus> updateShard = client.schema()
.shardUpdater()
.withClassName("Article")
.withShardName("shard-1234")
.withStatus(ShardStatuses.READONLY)
.run();
if (updateShard.hasErrors()) {
System.out.println(updateShard.getError());
return;
}
System.out.println(updateShard.getResult());
// Convenience method to update all shards in a class
Result<ShardStatus[]> updateShards = client.schema()
.shardsUpdater()
.withClassName("Article")
.withStatus(ShardStatuses.READY)
.run();
if (updateShards.hasErrors()) {
System.out.println(updateShards.getError());
return;
}
System.out.println(updateShards.getResult());
}
}
$ curl \
-X PUT \
-H "Content-Type: application/json" \
-d '{
"status": "READONLY"
}' \
http://localhost:8080/v1/schema/Article/shards/shard-1234
More Resourcesโ
If you can't find the answer to your question here, please look at the:
- Frequently Asked Questions. Or,
- Knowledge base of old issues. Or,
- For questions: Stackoverflow. Or,
- For more involved discussion: Weaviate Community Forum. Or,
- We also have a Slack channel.