Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
92 changes: 89 additions & 3 deletions _includes/code/howto/configure-rq/rq-compression-v3.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,9 @@
// ==============================

import assert from 'assert';
import weaviate from 'weaviate-client';
import { configure } from 'weaviate-client';
// START EnableRQ // START 1BitEnableRQ // START RQWithOptions // START Uncompressed
import weaviate, { configure } from 'weaviate-client';
// END EnableRQ // END 1BitEnableRQ // END RQWithOptions // END Uncompressed


const client = await weaviate.connectToLocal({
Expand Down Expand Up @@ -74,7 +75,8 @@ await client.collections.create({
vectorizers: configure.vectors.text2VecOpenAI({
// highlight-start
quantizer: configure.vectorIndex.quantizer.rq({
bits: 8, // Number of bits
bits: 8, // Optional: Number of bits
rescoreLimit: 20, // Optional: Number of candidates to fetch before rescoring
}),
// highlight-end
}),
Expand All @@ -84,4 +86,88 @@ await client.collections.create({
})
// END RQWithOptions

// =========================
// ===== Uncompressed =====
// =========================

client.collections.delete("MyCollection")

// START Uncompressed

await client.collections.create({
name: "MyCollection",
vectorizers: configure.vectors.text2VecOpenAI({
// highlight-start
quantizer: configure.vectorIndex.quantizer.none()
// highlight-end
}),
properties: [
{ name: "title", dataType: weaviate.configure.dataType.TEXT },
],
})
// END Uncompressed

// ==============================
// ===== UPDATE SCHEMA =====
// ==============================

client.collections.delete("MyCollection")
client.collections.create({
name: "MyCollection",
vectorizers: configure.vectors.text2VecOpenAI({
// highlight-start
quantizer: configure.vectorIndex.quantizer.none(),
// highlight-end
}),
properties: [
{ name: "title", dataType: weaviate.configure.dataType.TEXT },
],
})

// START UpdateSchema // START 1BitUpdateSchema
import { reconfigure } from 'weaviate-client';

const collection = client.collections.use("MyCollection")
// END UpdateSchema // END 1BitUpdateSchema
// START UpdateSchema

await collection.config.update({
vectorizers: [ reconfigure.vectors.update({
name: "default",
vectorIndexConfig: reconfigure.vectorIndex.hnsw({
quantizer: reconfigure.vectorIndex.quantizer.rq(),
}),
})]
})
// END UpdateSchema

// ================================
// ===== UPDATE SCHEMA 1-BIT =====
// ================================

client.collections.delete("MyCollection")
client.collections.create({
name: "MyCollection",
vectorizers: configure.vectors.text2VecOpenAI({
// highlight-start
quantizer: configure.vectorIndex.quantizer.none(),
// highlight-end
}),
properties: [
{ name: "title", dataType: weaviate.configure.dataType.TEXT },
],
})

// START 1BitUpdateSchema

await collection.config.update({
vectorizers: [ reconfigure.vectors.update({
name: "default",
vectorIndexConfig: reconfigure.vectorIndex.hnsw({
quantizer: reconfigure.vectorIndex.quantizer.rq({ bits: 1 }),
}),
})]
})
// END 1BitUpdateSchema

client.close()
2 changes: 1 addition & 1 deletion _includes/code/howto/manage-data.create.ts
Original file line number Diff line number Diff line change
Expand Up @@ -193,7 +193,7 @@ console.log('UUID: ', uuid)
// jeopardy = client.collections.use(wineRewiews)

result = await reviews.query.fetchObjectById('12345678-e64f-5d94-90db-c8cfa3fc1234')
assert.deepEqual(result?.properties, {
assert.equal(result?.properties, {
'question': 'This vector DB is OSS and supports automatic property type inference on import',
'answer': 'Weaviate',
});
Expand Down
43 changes: 35 additions & 8 deletions _includes/code/howto/search.bm25.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,19 +8,17 @@ import assert from 'assert';

import weaviate from 'weaviate-client';

const client = await weaviate.connectToWeaviateCloud(
process.env.WEAVIATE_URL,
{
authCredentials: new weaviate.ApiKey(process.env.WEAVIATE_API_KEY),
const client = await weaviate.connectToWeaviateCloud(process.env.WEAVIATE_URL as string, {
authCredentials: new weaviate.ApiKey(process.env.WEAVIATE_API_KEY as string),
headers: {
'X-OpenAI-Api-Key': process.env.OPENAI_APIKEY, // Replace with your inference API key
'X-OpenAI-Api-Key': process.env.OPENAI_APIKEY as string, // Replace with your inference API key
}
}
}
)

// START Basic // START Score // START Properties // START Boost // START Filter // START autocut // START limit
// START BM25GroupBy // START Basic // START Score // START Properties // START Boost // START Filter // START autocut // START limit
const jeopardy = client.collections.use('JeopardyQuestion');
// END Basic // END Score // END Properties // END Boost // END Filter // END autocut // END limit
// END BM25GroupBy // END Basic // END Score // END Properties // END Boost // END Filter // END autocut // END limit


// ============================
Expand Down Expand Up @@ -250,3 +248,32 @@ for (let object of result.objects) {
// assert.deepEqual(result.objects.length, 1);
// assert(result.objects[0].properties['answer'].includes('OSHA'));
}

// START BM25GroupBy

// Grouping parameters
const groupByProperties = {
property: "round", // group by this property
objectsPerGroup: 3, // maximum objects per group
numberOfGroups: 2 // maximum number of groups
}

// Query
const response = await jeopardy.query.bm25("California", {
groupBy: groupByProperties
})

for (let groupName in response.groups) {
console.log(groupName)
// Uncomment to view group objects
// console.log(response.groups[groupName].objects)
}
// END BM25GroupBy

assert.equal(response.groups <= 2, true)
assert.equal(response.groups > 0, true)

for (let groupName in response.groups) {
assert.equal(response.groups[groupName].numberOfObjects > 0, true)
assert.equal(response.groups[groupName].numberOfObjects <= 3, true)
}
39 changes: 34 additions & 5 deletions _includes/code/howto/search.filters.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,10 +7,10 @@ import { vectors, dataType } from 'weaviate-client';
// ===== INSTANTIATION-COMMON =====
// ================================

// searchMultipleFiltersAnd // searchMultipleFiltersNested
// searchMultipleFiltersAnd // searchMultipleFiltersNested // START ContainsNoneFilter
import weaviate, { Filters } from 'weaviate-client';

// END searchMultipleFiltersAnd // END searchMultipleFiltersNested
// END searchMultipleFiltersAnd // END searchMultipleFiltersNested // END ContainsNoneFilter

const client = await weaviate.connectToWeaviateCloud(process.env.WEAVIATE_URL as string, {
authCredentials: new weaviate.ApiKey(process.env.WEAVIATE_API_KEY as string),
Expand All @@ -20,10 +20,10 @@ const client = await weaviate.connectToWeaviateCloud(process.env.WEAVIATE_URL as
}
)

// searchSingleFilter // searchLikeFilter // ContainsAnyFilter // ContainsAllFilter // searchMultipleFiltersNested // searchMultipleFiltersAnd // searchFilterNearText // FilterByPropertyLength // searchCrossReference // searchCrossReference // searchMultipleFiltersNested
// START ContainsNoneFilter // searchSingleFilter // searchLikeFilter // ContainsAnyFilter // ContainsAllFilter // searchMultipleFiltersNested // searchMultipleFiltersAnd // searchFilterNearText // FilterByPropertyLength // searchCrossReference // searchCrossReference // searchMultipleFiltersNested
const jeopardy = client.collections.use('JeopardyQuestion');

// END searchSingleFilter // END searchLikeFilter // END ContainsAnyFilter // END ContainsAllFilter // END searchMultipleFiltersNested // END searchMultipleFiltersAnd // END searchFilterNearText // END FilterByPropertyLength // END searchCrossReference // END searchCrossReference // END searchMultipleFiltersNested
// END ContainsNoneFilter // END searchSingleFilter // END searchLikeFilter // END ContainsAnyFilter // END ContainsAllFilter // END searchMultipleFiltersNested // END searchMultipleFiltersAnd // END searchFilterNearText // END FilterByPropertyLength // END searchCrossReference // END searchCrossReference // END searchMultipleFiltersNested

// FilterByTimestamp // filterById
const myArticleCollection = client.collections.use('Article');
Expand Down Expand Up @@ -175,7 +175,8 @@ const result = await jeopardy.query.fetchObjects({
// highlight-start
filters: Filters.and(
jeopardy.filter.byProperty('round').equal('Double Jeopardy!'),
jeopardy.filter.byProperty('points').lessThan(600)
jeopardy.filter.byProperty('points').lessThan(600),
Filters.not(jeopardy.filter.byProperty("answer").equal("Yucatan"))
),
// highlight-end
limit: 3,
Expand Down Expand Up @@ -261,6 +262,34 @@ for (let object of result.objects) {
// }
}

// ==========================================
// ===== ContainsNoneFilter =====
// ==========================================

// START ContainsNoneFilter

// highlight-start
const tokenList = ["bird", "animal"]
// highlight-end

const response = await jeopardy.query.fetchObjects({
// highlight-start
// Find objects where the `question` property contains none of the strings in `token_list`
filters: jeopardy.filter.byProperty("question").containsNone(tokenList),
// highlight-end
limit: 3
})

for (const object of response.objects) {
console.log(object.properties)
}
// END ContainsNoneFilter

// Test results
// assert response.objects[0].collection == "JeopardyQuestion"
// assert (token_list[0] not in response.objects[0].properties["question"].lower() and token_list[1] not in response.objects[0].properties["question"].lower())
// End test

// ===================================================
// ===== Filters using Id =====
// ===================================================
Expand Down
Loading