Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Adding documentation for filter search in OpenSearch #7900

Merged
Merged
Changes from 20 commits
Commits
Show all changes
34 commits
Select commit Hold shift + click to select a range
9235dac
adding documentation for filter search in OpenSearch
leanneeliatra Aug 2, 2024
3db58b6
Update _search-plugins/filter-search.md
hdhalter Aug 2, 2024
8f35e20
Merge branch 'main' into adding-filter-search-results
leanneeliatra Aug 6, 2024
ab29e6a
reviewdog updates
leanneeliatra Aug 6, 2024
03e8674
Merge branch 'main' into adding-filter-search-results
leanneeliatra Aug 7, 2024
434aafb
Merge branch 'main' into adding-filter-search-results
leanneeliatra Aug 15, 2024
f7d4cd0
Merge branch 'main' into adding-filter-search-results
leanneeliatra Aug 20, 2024
10f9f8f
Merge branch 'main' into adding-filter-search-results
vagimeli Aug 28, 2024
c88e601
Merge branch 'main' into adding-filter-search-results
leanneeliatra Aug 29, 2024
c625110
Update filter-search.md
vagimeli Sep 3, 2024
59d3f09
Merge branch 'main' into adding-filter-search-results
vagimeli Sep 3, 2024
f952109
Merge branch 'main' into adding-filter-search-results
leanneeliatra Sep 10, 2024
5674a02
Merge branch 'main' into adding-filter-search-results
leanneeliatra Sep 23, 2024
f923669
Merge branch 'main' into adding-filter-search-results
vagimeli Sep 24, 2024
15b97e6
Merge branch 'main' into adding-filter-search-results
vagimeli Sep 24, 2024
71b640d
Merge branch 'main' into adding-filter-search-results
vagimeli Oct 8, 2024
1a23b50
Incorporating review comments.
leanneeliatra Oct 15, 2024
8aa29b6
Update _search-plugins/filter-search.md
vagimeli Oct 15, 2024
28aa7cd
Update _search-plugins/filter-search.md
vagimeli Oct 15, 2024
10f0181
Update filter-search.md
vagimeli Oct 15, 2024
bdf6042
Update _search-plugins/filter-search.md
vagimeli Oct 15, 2024
85e90ce
Merge branch 'main' into adding-filter-search-results
vagimeli Oct 15, 2024
3017860
Update _search-plugins/filter-search.md
vagimeli Oct 16, 2024
7552312
Update _search-plugins/filter-search.md
vagimeli Oct 16, 2024
24fddb0
Update _search-plugins/filter-search.md
vagimeli Oct 16, 2024
1efb63b
Update _search-plugins/filter-search.md
vagimeli Oct 16, 2024
c04ef8f
Update _search-plugins/filter-search.md
vagimeli Oct 16, 2024
7f1f9b7
Update _search-plugins/filter-search.md
vagimeli Oct 16, 2024
d9f1347
Update _search-plugins/filter-search.md
vagimeli Oct 16, 2024
865da34
Update _search-plugins/filter-search.md
vagimeli Oct 16, 2024
e37867a
Update _search-plugins/filter-search.md
vagimeli Oct 16, 2024
c444b4a
Update _search-plugins/filter-search.md
vagimeli Oct 16, 2024
77100a2
Update _search-plugins/filter-search.md
vagimeli Oct 16, 2024
05211a3
Merge branch 'main' into adding-filter-search-results
vagimeli Oct 16, 2024
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
149 changes: 149 additions & 0 deletions _search-plugins/filter-search.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,149 @@
---
layout: default
title: Filter search results
nav_order: 36
---

# Filter search results

You can filter searches using different methods, each suited to specific scenarios. You can apply filters at the query level, using `boolean` query clauses and `post_filter` and `aggregation` level filters, as follows:

- **Query-level filtering:** Apply `boolean` query filter clauses to filter search hits and aggregations, such as to narrow results to specific categories or brands.
- **Post-filter filtering:** Use `post_filter` to refine search hits based on user selections while preserving all aggregation options.
- **Aggregation-level filtering:** Adjust specific aggregations based on selected filters without impacting other aggregations.

## Query-level filtering with Boolean queries

Use a `boolean` query with a filter clause to apply filters to both search hits and aggregations. For example, if a shopper searches for `smartphones` from `BrandA`, a Boolean query can restrict results to only those smartphones from `BrandA`. The following steps guide you through query-level filtering.

1. Create an index `electronics` and provide the mapping using the following request:

```
vagimeli marked this conversation as resolved.
Show resolved Hide resolved
PUT /electronics
{
"mappings": {
"properties": {
"brand": { "type": "keyword" },
"category": { "type": "keyword" },
"price": { "type": "float" },
"features": { "type": "keyword" }
}
}
}
```
{% include copy-curl.html %}

2. Add documents to the `electronics` index using the following request:

```
vagimeli marked this conversation as resolved.
Show resolved Hide resolved
PUT /electronics/_doc/1?refresh
{
"brand": "BrandA",
"category": "Smartphone",
"price": 699.99,
"features": ["5G", "Dual Camera"]
}
PUT /electronics/_doc/2?refresh
{
"brand": "BrandA",
"category": "Laptop",
"price": 1199.99,
"features": ["Touchscreen", "16GB RAM"]
}
PUT /electronics/_doc/3?refresh
{
"brand": "BrandB",
"category": "Smartphone",
"price": 799.99,
"features": ["5G", "Triple Camera"]
}
```
{% include copy-curl.html %}

3. Apply a `boolean` filter query to display only `smartphones` from `BrandA` using the following request:

```
vagimeli marked this conversation as resolved.
Show resolved Hide resolved
GET /electronics/_search
{
"query": {
"bool": {
"filter": [
{ "term": { "brand": "BrandA" }},
{ "term": { "category": "Smartphone" }}
]
}
}
}
```
{% include copy-curl.html %}

## Narrowing results using `post-filter` while preserving aggregation visibility

Use `post_filter` to limit search hits while preserving all aggregation options. For example, if a shopper selects `BrandA`, results are filtered to show only `BrandA` products while maintaining visibility of all brand options in the aggregations, as shown in the following example request:
vagimeli marked this conversation as resolved.
Show resolved Hide resolved

```
vagimeli marked this conversation as resolved.
Show resolved Hide resolved
GET /electronics/_search
{
"query": {
"bool": {
"filter": { "term": { "category": "Smartphone" }}
}
},
"aggs": {
"brands": {
"terms": { "field": "brand" }
}
},
"post_filter": {
"term": { "brand": "BrandA" }
}
}
```
{% include copy-curl.html %}

Your result should show `BrandA` smartphones in the search hits and all brands in the aggregations.
vagimeli marked this conversation as resolved.
Show resolved Hide resolved

## Refining aggregrations with aggregation-level filtering

Check failure on line 106 in _search-plugins/filter-search.md

View workflow job for this annotation

GitHub Actions / style-job

[vale] reported by reviewdog 🐶 [OpenSearch.Spelling] Error: aggregrations. If you are referencing a setting, variable, format, function, or repository, surround it with tic marks. Raw Output: {"message": "[OpenSearch.Spelling] Error: aggregrations. If you are referencing a setting, variable, format, function, or repository, surround it with tic marks.", "location": {"path": "_search-plugins/filter-search.md", "range": {"start": {"line": 106, "column": 13}}}, "severity": "ERROR"}
vagimeli marked this conversation as resolved.
Show resolved Hide resolved

You can use aggregation-level filtering to apply filters to specific aggregations, without affecting the overall aggregation. For example, use aggregation-level filtering to filter the `price_ranges` aggregation based on selected brands, `BrandA` and `BrandB`, without affecting the main `price_ranges` aggregation, as shown in the following example request. This displays price ranges relevant to the selected brands while also displaying overall price ranges for all products.
vagimeli marked this conversation as resolved.
Show resolved Hide resolved

```
vagimeli marked this conversation as resolved.
Show resolved Hide resolved
GET /electronics/_search
{
"query": {
"bool": {
"filter": { "term": { "category": "Smartphone" }}
}
},
"aggs": {
"price_ranges": {
"range": {
"field": "price",
"ranges": [
{ "to": 500 },
{ "from": 500, "to": 1000 },
{ "from": 1000 }
]
}
},
"filtered_brands": {
"filter": {
"terms": { "brand": ["BrandA", "BrandB"] }
},
"aggs": {
"price_ranges": {
"range": {
"field": "price",
"ranges": [
{ "to": 500 },
{ "from": 500, "to": 1000 },
{ "from": 1000 }
]
}
}
}
}
}
}
```
{% include copy-curl.html %}
Loading