Skip to main content

Step 6: Hybrid queries

In this step, we will not only query data using vector similarity but also use the metadata field to filter the results.

When submitting a query, you can optionally add a filter text field to the query. This field is compatible with the Lucene query syntax (also known as OpenSearch/ElasticSearch query syntax).

note

Filters are only evaluated against item metadata fields. They are not evaluated against the item's value or vector fields.

Filtering by salary

Let's add a salary filter to the query. This filter will only return items with a salary greater than 12,000:

  const results = await client.query({
databaseId,
query: {
vector: [0.5, 0.5, 0.5, 0.5],
},
filter: 'salary:>12000'
});

console.log(results);

Now, let's query for salary between 10,000 and 15,000:

  const results = await client.query({
databaseId,
query: {
vector: [0.5, 0.5, 0.5, 0.5],
},
filter: 'salary:[10000 TO 15000]'
});

console.log(results);

Filtering by tags

You can also filter by tags. Let's filter by the tag javascript:

  const results = await client.query({
databaseId,
query: {
vector: [0.5, 0.5, 0.5, 0.5],
},
filter: 'tags:javascript'
});

console.log(results);

Combining filters

You can combine filters using boolean operators. Let's combine the salary and tag filters:

  const results = await client.query({
databaseId,
query: {
vector: [0.5, 0.5, 0.5, 0.5],
},
filter: 'salary:[15000 TO 15000] AND tags:javascript'
});

console.log(results);