diff --git a/packages/docs/pages/_meta.json b/packages/docs/pages/_meta.json
index 20d7253b3..5b2f0e0c5 100644
--- a/packages/docs/pages/_meta.json
+++ b/packages/docs/pages/_meta.json
@@ -26,6 +26,10 @@
"filters": {
"title": "Filters",
"href": "/usage/search/filters"
+ },
+ "typescript": {
+ "title": "Typescript",
+ "href": "/usage/typescript"
}
}
},
diff --git a/packages/docs/pages/index.mdx b/packages/docs/pages/index.mdx
index 13e746904..785295cf7 100644
--- a/packages/docs/pages/index.mdx
+++ b/packages/docs/pages/index.mdx
@@ -1,4 +1,4 @@
-import { Tab, Tabs, Card, Cards } from 'nextra-theme-docs'
+import { Tab, Tabs, Card, Cards, Callout } from 'nextra-theme-docs'
import { BsDatabaseFillAdd, BsCodeSlash, BsPlugin } from 'react-icons/bs'
import { AiFillFileAdd, AiOutlineSearch, AiFillDelete } from 'react-icons/ai'
@@ -19,40 +19,6 @@ Orama is a fast, batteries-included, full-text and vector search engine entirely
Get started with just a few lines of code:
-
- }
- title="Create a new database"
- href="/usage/create"
- />
- }
- title="Insert data"
- href="/usage/insert"
- />
- }
- title="Search"
- href="/usage/search/introduction"
- />
- }
- title="Remove data"
- href="/usage/remove"
- />
- }
- title="Extend Orama"
- href="/internals/components"
- />
- }
- title="Use Plugins"
- href="/plugins"
- />
-
-
-
## Requirements
@@ -62,7 +28,7 @@ A JavaScript runtime is the **only** requirement. Orama has been designed to wor
You can install Orama using npm, yarn, pnpm:
-
+
```bash copy
npm install @orama/orama
@@ -78,40 +44,97 @@ You can install Orama using npm, yarn, pnpm:
pnpm add @orama/orama
```
+
+ ```html copy
+
+
+
+
+
+ ```
+
-Or import it directly in a browser module:
-
-```html copy
-
-
-
-
-
+```js copy
+import { create, insert, search } from '@orama/orama'
```
-# CommonJS Imports
+
+ Orama ships **ESM** modules by default. This allows us to move faster when providing new features and bug fixes, as well as using the `"exports"` field in `package.json` to provide a better developer experience.
+ CommonJS imports are still supported, but we suggest you to migrate to ESM.
+
-Orama ships **ESM** modules by default. This allows us to move faster when providing new features and bug fixes, as well as using the `"exports"` field in `package.json` to provide a better developer experience.
+## Usage
-CommonJS imports are still supported, but we suggest you to migrate to ESM.
+```js copy
+import { create, insert, search } from '@orama/orama'
-## TypeScript
-
-Set `moduleResolution` in the `compilerOptions` in your `tsconfig.json` to be either `Node16` or `NodeNext`.
-
-When importing types, always refer to the standard orama import:
+const db = await create({
+ schema: {
+ title: 'string',
+ description: 'string',
+ }
+});
+await insert(db, { title: 'foo', description: 'bar' });
+const results = await search(db, { term: 'foo' });
+```
-```ts copy
-import type { Language } from '@orama/orama'
+The variable `results` will contain the following object:
+```js
+{
+ elapsed: { raw: 924798, formatted: '924μs' },
+ count: 1,
+ hits: [
+ {
+ id: '84747683-1',
+ score: 0.3530643616453674,
+ document: { title: 'foo', description: 'bar' }
+ }
+ ]
+}
```
-# Community Rewards
+
+ }
+ title="Create a new database"
+ href="/usage/create"
+ />
+ }
+ title="Insert data"
+ href="/usage/insert"
+ />
+ }
+ title="Search"
+ href="/usage/search/introduction"
+ />
+ }
+ title="Remove data"
+ href="/usage/remove"
+ />
+ }
+ title="Extend Orama"
+ href="/internals/components"
+ />
+ }
+ title="Use Plugins"
+ href="/plugins"
+ />
+
+
+## Community Rewards
+Are you using Orama in production? Have you written an article or made a YouTube video on Orama? [Contact us](mailto:info@oramasearch.com) to get some Orama swag in return!
![Orama Community Rewards](/misc/community-rewards.png)
-Are you using Orama in production? Have you written an article or made a YouTube video on Orama? [Contact us](mailto:info@oramasearch.com) to get some Orama swag in return!
diff --git a/packages/docs/pages/usage/_meta.json b/packages/docs/pages/usage/_meta.json
index f6a2b9021..d74a06451 100644
--- a/packages/docs/pages/usage/_meta.json
+++ b/packages/docs/pages/usage/_meta.json
@@ -4,5 +4,6 @@
"remove": "Remove",
"update": "Update",
"utilities": "Utilities",
- "search": "Search"
+ "search": "Search",
+ "typescript": "Typescript"
}
diff --git a/packages/docs/pages/usage/create.mdx b/packages/docs/pages/usage/create.mdx
index 927aabbe9..ef4bbc194 100644
--- a/packages/docs/pages/usage/create.mdx
+++ b/packages/docs/pages/usage/create.mdx
@@ -9,7 +9,7 @@ Not all properties need to be indexed, but only those that we want to be able to
Adding a property to the schema will make it searchable, but it will also increase the size of the database and overall insertion and search times.
-Therefore, you should only index the properties that you need to search for.
+Therefore, for having a better experience, you should only index the properties that you need to search for.
If you want to learn more and see real-world examples, check out [this blog post](https://oramasearch.com/blog/optimizing-orama-schema-optimization) we wrote about schema optimization.
diff --git a/packages/docs/pages/usage/typescript.mdx b/packages/docs/pages/usage/typescript.mdx
new file mode 100644
index 000000000..1c52dcbc6
--- /dev/null
+++ b/packages/docs/pages/usage/typescript.mdx
@@ -0,0 +1,49 @@
+
+
+# TypeScript
+
+## Configuration
+Set `moduleResolution` in the `compilerOptions` in your `tsconfig.json` to be either `Node16` or `NodeNext`.
+
+When importing types, always refer to the standard orama import:
+
+```ts copy
+import type { Language } from '@orama/orama'
+```
+
+## Usage
+
+Orama is written in TypeScript and provides type definitions for all of its public APIs.
+This means the results of all functions are typed, and the types are **inferred from the schema provided**.
+
+```typescript copy
+const db = await create({
+ schema: {
+ title: 'string',
+ plot: 'string',
+ }
+})
+await insert(db, {
+ title: 'The prestige',
+ plot: 'Two friends and fellow magicians become bitter enemies after a sudden tragedy. As they devote themselves to this rivalry, they make sacrifices that bring them fame but with terrible consequences.'
+})
+const s = await search(db, { term: 'prestige' })
+
+const firstTitle: string = s.hits[0].document.title // Inferred by the schema provided
+```
+
+Anyway, because Orama schema defines only searchable fields, you may want to add some extra fields to your documents.
+Extra fields are not indexed, so they are not searchable, but they are still available in the results.
+The type of these fields is not inferred, so it's `any`.
+
+```typescript copy
+await insert(db, {
+ title: 'Big Fish',
+ director: 'Tim Burton',
+ plot: 'Will Bloom returns home to care for his dying father, who had a penchant for telling unbelievable stories. After he passes away, Will tries to find out if his tales were really true.',
+ year: 2004,
+ isFavorite: true
+})
+const s = await search(db, { term: 'fish' })
+const year: any = s.hits[0].document.year // not inferred, so it's any
+```