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 feature descriptions #55

Open
wants to merge 1 commit into
base: feature-descriptions
Choose a base branch
from

Conversation

Pensu
Copy link
Contributor

@Pensu Pensu commented Apr 12, 2021

Change Summary

This PR adds feature descriptions for federated search, high availability, scoped API keys, sorting, synonyms and upgrades.

PR Checklist

@Pensu Pensu force-pushed the feature-descriptions branch from 5b8cfd2 to e30f6ad Compare April 12, 2021 16:51
@Pensu Pensu changed the title Adding further feature descriptions Adding feature descriptions Apr 12, 2021
@@ -149,6 +149,12 @@ let config = {
['/0.19.0/guide/features/typo-tolerance', 'Typo Tolerance'],
['/0.19.0/guide/features/faceting', 'Faceting'],
['/0.19.0/guide/features/filtering', 'Filtering'],
['/0.19.0/guide/features/federated', 'Federated Search'],
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Let's have the route as /0.19.0/guide/features/federated-search

@@ -149,6 +149,12 @@ let config = {
['/0.19.0/guide/features/typo-tolerance', 'Typo Tolerance'],
['/0.19.0/guide/features/faceting', 'Faceting'],
['/0.19.0/guide/features/filtering', 'Filtering'],
['/0.19.0/guide/features/federated', 'Federated Search'],
['/0.19.0/guide/features/scoped-API-keys', 'Scoped API Keys'],
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Let's call this Multi-tenant Indices.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@jasonbosco Is that for route or title?

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

For both route and title

['/0.19.0/guide/features/federated', 'Federated Search'],
['/0.19.0/guide/features/scoped-API-keys', 'Scoped API Keys'],
['/0.19.0/guide/features/synonyms', 'Synonyms'],
['/0.19.0/guide/features/curation', 'Curation and Merchandizing'],
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Let's name the route as: curation-merchandizing

['/0.19.0/guide/features/scoped-API-keys', 'Scoped API Keys'],
['/0.19.0/guide/features/synonyms', 'Synonyms'],
['/0.19.0/guide/features/curation', 'Curation and Merchandizing'],
['/0.19.0/guide/features/raft', 'Raft Based Clustering'],
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Let's call this clustering instead of Raft.

['/0.19.0/guide/features/synonyms', 'Synonyms'],
['/0.19.0/guide/features/curation', 'Curation and Merchandizing'],
['/0.19.0/guide/features/raft', 'Raft Based Clustering'],
['/0.19.0/guide/features/upgrade', 'Seamless Version Upgrades'],
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Let's remove upgrades from the features section.

@@ -149,6 +149,12 @@ let config = {
['/0.19.0/guide/features/typo-tolerance', 'Typo Tolerance'],
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

What I run this on dev, I see this error:

No matching page found for sidebar item "/0.19.0/guide/features/curation"

I don't see a file called curation.md in the repo

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I haven't added it yet. Will be added in future PR. Do you want me to add a placeholder file?

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ah I see, in that case let's remove the line from the side-bar configuration, so the nav renders in the meantime.

@@ -0,0 +1,182 @@
# Federated Search

Federated or multi search is a way to search for documents in multiple collections as part of a single search query. Federated search can help reduce network latencies. It can also be used to present similar content from other collections, that might encourage users to browse more content across your application. For example, your application might have different collections for `Nike` and `Adidas`. Now, if a user is looking for a shoe from a specific branch and they might not know what other brands are available, the search query can perform a search on both the collections and return relevant results from both the collections.
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Federated or multi search is a way to search for documents in multiple collections as part of a single search query.

[Add] ... You can also use multi-search to send multiple search queries to the same collections, essentially giving you a way to batch search queries in a single HTTP request.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

To be able to get a screenshot, could we use the example of searching for say "Canon" on this site: https://www.bhphotovideo.com/

It should show results across products, help articles and search suggestions.

@@ -0,0 +1,47 @@
# Scoped API Keys

API keys are at the core of Typesense. To perform any action with Typesense, you need API keys. Typesense also allows access control on API keys. You can define capabilities as to what a user can or cannot do. You can also restrict access to a specific document or collection. In the case of a multi-tenant environment, you can scope API keys to a particular subset. This is helpful when you have indexed data from multiple tenants in your Typesense server and want to restrict users to only access their subset of data.
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Instead of :

API keys are at the core of Typesense.

Typesense is designed with security and fine-grained access control in mind.


Typesense allows you to create API keys that have pre-defined filters embedded in them. So, whenever you run a search query with these API keys, those filters are automatically applied and cannot be overridden. You can then provide those search API keys to users and they would only be able to access the data that is allowed by the set filter. To create scoped API keys, you just need a parent key.

Let's create a scoped search API key that will restrict users to only access documents that have the company id 124:
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Could you add a sample set of documents, showing company_id set to different values. And how a user using a scoped key with company_id: 124 only gets records with that company_id and not others?

@@ -0,0 +1,3 @@
# Upgrades
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We can remove this section from the features section.

@@ -0,0 +1,5 @@
# Raft Based Clustering

High availability is essential for production environments. Typesense uses [Raft algorithm](https://raft.github.io/) to create a highly available cluster with more than one Typesense servers. Based on raft consensus, to handle 1-node failure, you need to create a cluster with 3 nodes. Similarly for 2-node failure, you need to create a 5 node cluster. Note that adding more nodes will also add write latencies.
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

uses Raft algorithm

Correction: "uses the Raft Consensus Algorithm"

Based on raft consensus, to handle 1-node failure, you need to create a cluster with 3 nodes. Similarly for 2-node failure, you need to create a 5 node cluster.

Correction:

With Raft, you need to create a cluster of 3 nodes to tolerate single node failures. If you wish to handle 2-node failures, then you need a minimum of 5 nodes in the cluster.

Note that adding more nodes will also add write latencies.

Correction:

Note that adding more nodes will also increase write latencies.

@@ -0,0 +1,94 @@
# Sorting

Sorting is the ordering of search results either in ascending or descending order based on a specific parameter.
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

based on a specific parameter.

"based on one or more parameters"

@Pensu Pensu force-pushed the feature-descriptions branch 2 times, most recently from c442c1c to 9453ff6 Compare April 15, 2021 06:39
@Pensu Pensu force-pushed the feature-descriptions branch 3 times, most recently from d00b4c9 to 354503f Compare April 28, 2021 10:20
@Pensu Pensu force-pushed the feature-descriptions branch from 354503f to adb5819 Compare April 28, 2021 10:23
@@ -0,0 +1,170 @@
# Scoped API Keys

Typesense is designed with security and fine-grained access control in mind. To perform any action with Typesense, you need API keys. Typesense also allows access control on API keys. You can define capabilities as to what a user can or cannot do. You can also restrict access to a specific document or collection. In the case of a multi-tenant environment, you can scope API keys to a particular subset. This is helpful when you have indexed data from multiple tenants in your Typesense server and want to restrict users to only access their subset of data.
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

In the case of a multi-tenant environment, you can scope API keys to a particular subset

... to a particular subset of records.

This is helpful when you have indexed data from multiple tenants

tenants -> users


Typesense is designed with security and fine-grained access control in mind. To perform any action with Typesense, you need API keys. Typesense also allows access control on API keys. You can define capabilities as to what a user can or cannot do. You can also restrict access to a specific document or collection. In the case of a multi-tenant environment, you can scope API keys to a particular subset. This is helpful when you have indexed data from multiple tenants in your Typesense server and want to restrict users to only access their subset of data.

Typesense allows you to create API keys that have pre-defined filters embedded in them. So, whenever you run a search query with these API keys, those filters are automatically applied and cannot be overridden. You can then provide those search API keys to users and they would only be able to access the data that is allowed by the set filter. To create scoped API keys, you just need a parent key.
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

To create scoped API keys, you just need a parent key

... a parent key that only has documents:search permissions on it.

{"company_id":127,"company_name":"New Stark Industries","country":"USA","id":"3","num_employees":7945}
```

Now, let's create a scoped API key that will restrict access to documents that have the `company_id` value as 124.
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Before this, could you also add a code snippet to indicate how to create a parent key with just search permissions, so this article is self-contained?

"RDhxa2VKTnBQVkxaVlFIOS9JWDZ2bDdtMU5HL3laa0pab2pTeEUzbFBhZz1STjIzeyJmaWx0ZXJfYnkiOiJjb21wYW55X2lkOjEyNCIsImV4cGlyZXNfYXQiOjE2MTE1OTA0NjV9"
```

The `expires_at` parameter sets the expiration date for the API key and must be less that the expiration of parent API key. Let's perform a search using the scoped API key:
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

New paragraph for "Let's perform a search using the scoped API key"

}
```

As you see in the response, the document with `company_id` set to 124 is shown in the output. There is another document that has the `company_name` as "New Stark Industries", but it won't be shown in the result.
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

but it won't be shown in the result

... because it does not match the filter ... we embedded in the scoped API key.


</template>
</Tabs>

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Now searching for any of blazer, coat or jacker, will return results that contain the other two terms as well, since they're defined as multi-way synonyms.

@@ -0,0 +1,186 @@
# Federated Search

Federated or multi search is a way to search for documents in multiple collections as part of a single search query. You can also use multi-search to send multiple search queries to the same collections, essentially giving you a way to batch search queries in a single HTTP request. Federated search can help reduce network latencies. It can also be used to present similar content from other collections, that might encourage users to browse more content across your application. For example, your application might have different collections for `Nike` and `Adidas`. Now, if a user is looking for a shoe from a specific branch and they might not know what other brands are available, the search query can perform a search on both the collections and return relevant results from both the collections.
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

to present similar content from other collections

to present results for the same search query from multiple collections...

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

For example, your application might have different collections for Nike and Adidas. Now, if a user is looking for a shoe from a specific branch and they might not know what other brands are available, the search query can perform a search on both the collections and return relevant results from both the collections.

This example is a little confusing. Now that we have the BHP example below, let's remove this one.

@@ -0,0 +1,186 @@
# Federated Search
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Let's call this file federated-search.md so the url has the word search


Federated or multi search is a way to search for documents in multiple collections as part of a single search query. You can also use multi-search to send multiple search queries to the same collections, essentially giving you a way to batch search queries in a single HTTP request. Federated search can help reduce network latencies. It can also be used to present similar content from other collections, that might encourage users to browse more content across your application. For example, your application might have different collections for `Nike` and `Adidas`. Now, if a user is looking for a shoe from a specific branch and they might not know what other brands are available, the search query can perform a search on both the collections and return relevant results from both the collections.

For example, if you search for `Canon` on https://www.bhphotovideo.com/, you would see that there are multiple results shown including products, suggestions and help resources:
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

products, suggestions and help resources...

each of which could be indexed in separate collections, but the search term Canon is sent to all three indices and results From multiple collections are shown side-by-side


![bhp federated example](~@images/bhp-federated.png)

Typesense supports searching across multiple collections in a single HTTP request. Let's create a search query for shoes:
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Could use make an example though would mimic the BHP example from above, searching across 3 collections?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants