🌌 Fast, in-memory, full-text search engine written in TypeScript. Now in beta.

Overview

Lyra

Tests

Installation

You can install Lyra using npm, yarn, pnpm:

npm i @nearform/lyra
yarn add @nearform/lyra
pnpm add @nearform/lyra

Usage

Lyra is quite simple to use. The first thing to do is to create a new database instance and set an indexing schema:

import { Lyra } from '@nearform/lyra';

const db = new Lyra({
  schema: {
    author: 'string',
    quote: 'string'
  }
});

Lyra will only index string properties, but will allow you to set and store additional data if needed.

Once the db instance is created, you can start adding some documents:

await db.insert({
  quote: 'It is during our darkest moments that we must focus to see the light.',
  author: 'Aristotle'
});

await db.insert({
  quote: 'If you really look closely, most overnight successes took a long time.',
  author: 'Steve Jobs'
});

await db.insert({
  quote: 'If you are not willing to risk the usual, you will have to settle for the ordinary.',
  author: 'Jim Rohn'
});

await db.insert({
  quote: 'You miss 100% of the shots you don\'t take',
  author: 'Wayne Gretzky - Michael Scott'
});

After the data has been inserted, you can finally start to query the database.

const searchResult = await db.search({
  term: 'if',
  properties: '*'
});

In the case above, you will be searching for all the documents containing the word if, looking up in every schema property (AKA index):

{
  elapsed: '99ΞΌs',
  hits: [
    {
      id: 'ckAOPGTA5qLXx0MgNr1Zy',
      quote: 'If you really look closely, most overnight successes took a long time.',
      author: 'Steve Jobs'
    },
    {
      id: 'fyl-_1veP78IO-wszP86Z',
      quote: 'If you are not willing to risk the usual, you will have to settle for the ordinary.',
      author: 'Jim Rohn'
    }
  ],
  count: 2
}

You can also restrict the lookup to a specific property:

const searchResult = await db.search({
  term: 'Michael',
  properties: ['author']
});

Result:

{
  elapsed: '111ΞΌs',
  hits: [
    {
      id: 'L1tpqQxc0c2djrSN2a6TJ',
      quote: "You miss 100% of the shots you don't take",
      author: 'Wayne Gretzky - Michael Scott'
    }
  ],
  count: 1
}

If needed, you can also delete a given document by using the delete method:

await db.delete('L1tpqQxc0c2djrSN2a6TJ');

License

Lyra is licensed under the Apache 2.0 license.

Comments
  • Create better docs

    Create better docs

    With Lyra's upcoming first stable release, I would love to have a better documentation website, maybe using Docusaurus or something similar. The current design is not very optimal, and documentation is poorly organized

    enhancement good first issue help wanted 
    opened by micheleriva 16
  • Disk persistence

    Disk persistence

    Is your feature request related to a problem? Please describe. In order to be in line with cloud environment (or instance rebooting) an API for persist/restore in memory database could be fantastic.

    Describe the solution you'd like I'd like file system usage for this kind of activities because you can resize disks size without reboot the instance and disk usage is cheaper than ram.

    question discussion 
    opened by gioboa 11
  • chore: do not publish source files to npm

    chore: do not publish source files to npm

    30.3 MB Unpacked Size πŸ˜¨πŸ˜…

    This change will make sure that only the dist folder and other files like LICENSE, README, and package.json get published to npm.

    opened by iShibi 9
  • fix(stemmer): fix handling of stemmer imports

    fix(stemmer): fix handling of stemmer imports

    hotfix for #126

    • enables the TS allowJS flag so that the TS compiler copies the js files from stemmer as suggested here
    • added a "smoke" test that runs a basic search after importing lyra from dist. This is an attempt to avoid errors like this in the future. I added this test to the CI also.
    • removes the cjs build of the stemmer and renames the esm build to lib. Now that the typescript compiler handles importing, it should only be esm

    Notes

    1. The npm run script ci with coverage checks isn't actually run by the CI and notably the coverage checks are failing. Probably want to fix this in the future
    opened by codyzu 8
  • Better docs

    Better docs

    Alright. ( #24 ) Here we are @micheleriva πŸ˜„πŸ‘‹πŸ½

    New docs live at /packages/lyra-docs. A simple pnpm install && pnpm start should run with no problems.

    • [x] homepage
    • [x] getting started and installation
    • [x] create lyra instance page
    • [x] search data page
    • [x] insert data page
    • [x] delete data page

    ...some extras.


    For the local search (hope I understood correctly) I used Local search plugin, as it was the most mantained one in the list.

    Waiting for when we'll implement Lyra as search engine πŸ˜‰ I open a draft pr because I expect some fine tuning activities and some finessing to do.

    Fine tuning and finessing

    • [x] Removal of blog .md files
    • [x] Removal unused images
    • [x] Dead code cleaning
    • [ ] Re-checking for typos
    • [ ] Search bar fix

    Cannot wait to hear your feedback. πŸ‘ŠπŸ½

    opened by thomscoder 8
  • [BUG] Duplicate hits when overriding `id`

    [BUG] Duplicate hits when overriding `id`

    Describe the bug When overriding the property id of documents, search will return more hits than the actual count of hits in the search results. The additional hits will be duplicated documents.

    To Reproduce Steps to reproduce the behavior:

    Use this sample script:

    import { create, insert, search } from '@nearform/lyra';
    
    const db = create({
    	schema: {
    		id: 'string',
    		quote: 'string',
    		author: 'string',
    		what: 'string',
    		who: 'string',
    	},
    });
    
    insert(db, {
    	id: '1.0',
    	quote: 'It is during our darkest moments that we must focus to see the light.',
    	author: 'Aristotle',
    	what: '',
    	who: '',
    });
    
    insert(db, {
    	id: '2.0',
    	quote: 'If you really look closely, most overnight successes took a long time.',
    	author: 'Steve Jobs',
    	what: '',
    	who: '',
    });
    
    insert(db, {
    	id: '3.0',
    	quote: 'If you are not willing to risk the usual, you will have to settle for the ordinary.',
    	author: 'Jim Rohn',
    	what: '',
    	who: '',
    });
    
    insert(db, {
    	id: '4.0',
    	quote: 'You miss 100% of the shots you don\'t take',
    	author: 'Wayne Gretzky - Michael Scott',
    	what: '',
    	who: '',
    });
    
    const searchResult = search(db, {
    	term: 'if',
    	properties: '*',
    });
    
    console.log(searchResult);
    

    Sample output:

    {
      elapsed: 169640n,
      hits: [
        {
          id: '2.0',
          quote: 'If you really look closely, most overnight successes took a long time.',
          author: 'Steve Jobs',
          what: '',
          who: ''
        },
        {
          id: '3.0',
          quote: 'If you are not willing to risk the usual, you will have to settle for the ordinary.',
          author: 'Jim Rohn',
          what: '',
          who: ''
        },
        {
          id: '2.0',
          quote: 'If you really look closely, most overnight successes took a long time.',
          author: 'Steve Jobs',
          what: '',
          who: ''
        },
        {
          id: '3.0',
          quote: 'If you are not willing to risk the usual, you will have to settle for the ordinary.',
          author: 'Jim Rohn',
          what: '',
          who: ''
        },
        {
          id: '2.0',
          quote: 'If you really look closely, most overnight successes took a long time.',
          author: 'Steve Jobs',
          what: '',
          who: ''
        },
        {
          id: '3.0',
          quote: 'If you are not willing to risk the usual, you will have to settle for the ordinary.',
          author: 'Jim Rohn',
          what: '',
          who: ''
        },
        {
          id: '2.0',
          quote: 'If you really look closely, most overnight successes took a long time.',
          author: 'Steve Jobs',
          what: '',
          who: ''
        },
        {
          id: '3.0',
          quote: 'If you are not willing to risk the usual, you will have to settle for the ordinary.',
          author: 'Jim Rohn',
          what: '',
          who: ''
        }
      ],
      count: 2
    }
    

    Expected behavior It is expected that the hits array contains no more than count: n and no duplicated documents.

    Screenshots If applicable, add screenshots to help explain your problem.

    Desktop (please complete the following information):

    • OS: Fedora 36
    • Browser: N/A
    • Version: @nearform/lyra 0.0.4, 0.0.5

    Smartphone (please complete the following information): N/A

    Additional context Bug is reproducible under Node 16, 17, and 18, and Deno 1.24.x (using import of https://cdn.skypack.dev/@nearform/[email protected]?dts)

    bug 
    opened by aaronhuggins 7
  • Search case-sensitive for terms with a length less than 3

    Search case-sensitive for terms with a length less than 3

    Describe the bug It seems that the search is case-sensitive for words with a length < 3

    To Reproduce Insert records like:

    • if you are interested
    • if you will go out..
    • search for the term If
    • you retrieve 0 result
    • if you search for the terms: if you
    • you get results

    Expected behavior I am expecting that the search is case-sensitive or not with a specific rule

    related PR: #57 (but it doesn't fix the problem)

    opened by AlessandroMinoccheri 7
  • Support for nested properties

    Support for nested properties

    Is your feature request related to a problem? Please describe. As for now, Lyra does not support nested properties. Thus, the following code will break:

    import { lyra } from '@nearfom/lyra';
    
    const movieDB = new Lyra({
      schema: {
        title: 'string',
        director: 'string',
        plot: 'string',
        year: 'number',
        isFavorite: 'boolean',
        cast: { // <-------- objects are not supported yet
          director: 'string',
          leading: 'string'
        }
      }
    });
    

    We should grant support for nested properties to Lyra

    good first issue v0.1.0 
    opened by micheleriva 7
  • Consider adding JSDoc to the APIs

    Consider adding JSDoc to the APIs

    Is your feature request related to a problem? Please describe. I've started working on the docusaurus docs as in #24. I think these two issuses can be related to each other πŸ™‚

    Describe the solution you'd like I'd like to add some JSDoc to current or future APIs. While it is true they're quite intuitive, I think it would ease the end-user in the usage of Lyra's methods.

    Additional context Before: Screenshot 2022-07-19 111205

    After (merely an example): Screenshot 2022-07-19 111608

    discussion 
    opened by thomscoder 6
  • Error with fresh Lyra installation

    Error with fresh Lyra installation

    Describe the bug I've created a new project where I wanted to implement Lyra, so I've added it as a dependency. When I've try to import Lyra, I get the following output error:

    ❯ npm run test
    
    > [email protected] test
    > node index.js
    
    node:internal/errors:465
        ErrorCaptureStackTrace(err);
        ^
    
    Error [ERR_MODULE_NOT_FOUND]: Cannot find package '~/dev/new-lyra/node_modules/@nearform/lyra/' imported from ~/dev/new-lyra/index.js
    

    To Reproduce Steps to reproduce the behavior:

    1. Create a new empty JS project: npm init --yes
    2. Install Lyra as a dependency: npm install @nearform/lyra
    3. Create a simple file that imports Lyra.
    4. Run it.

    Screenshots

    This is the content of Lyra's directory inside node_modules

    image

    If applicable, add screenshots to help explain your problem.

    Desktop (please complete the following information):

    • OS: macOS Monterey 12.4
    • Environment: Node
    • Node: v18.6.0
    • npm: v8.14.0
    • Lyra: v0.0.1-beta-11

    Additional context

    I've created a repository with the reproduced error hoping it could be useful.

    bug 
    opened by mateonunez 6
  • Demo page improvements and restyling

    Demo page improvements and restyling

    So I read the tweet of Michele, and I tried to improve the demo page as I could without having any specification about the needs.

    I aligned better the form elements and changed the header of the page (imho this style is cleaner and more modern, maybe we could adopt it even in the homepage?). I also added autofocus on the search input. Of course if it is not as you guys were thinking it, I can improve it.

    The main part now that should be improved is the search results, but about this... Can I suggest to use a better structured database? The categories in this example are not easy to display and organize since they are not always the same. Maybe using some more "mainstream" data could be nice (I was thinking movie quotes) ? Dunno.

    Let me know!

    opened by paolo-cargnin 5
  • refactor: insert and insertWithHooks functions are almost identical

    refactor: insert and insertWithHooks functions are almost identical

    Since the insert and the insertWithHooks are more or less the same functions, I'm wondering if it's worth adding a field inside the InsertConfig type like:

    export type InsertConfig = {
      language: Language;
      enableAfterInsertHooks?: boolean;
    };
    

    and update the insert function like this:

    export async function insert<S extends PropertiesSchema>(
      lyra: Lyra<S>,
      doc: ResolveSchema<S>,
      config?: InsertConfig,
    ): Promise<{ id: string }> {
      config = { language: lyra.defaultLanguage, ...config };
      const id = uniqueId();
    
      if (!SUPPORTED_LANGUAGES.includes(config.language)) {
        throw new Error(ERRORS.LANGUAGE_NOT_SUPPORTED(config.language));
      }
    
      if (!recursiveCheckDocSchema(doc, lyra.schema)) {
        throw new Error(ERRORS.INVALID_DOC_SCHEMA(lyra.schema, doc));
      }
    
      lyra.docs[id] = doc;
      recursiveTrieInsertion(lyra.index, lyra.nodes, doc, id, config, undefined, lyra.tokenizer as TokenizerConfigExec);
      trackInsertion(lyra);
      if (config?.enableAfterInsertHooks && lyra.hooks.afterInsert) {
        await hookRunner.call(lyra, lyra.hooks.afterInsert, id);
      }
    
      return { id };
    }
    

    Maybe it's too early to do this kind of refactoring but why not discuss it! πŸ˜„

    opened by stearm 2
  • feat(tokenizer): adds basic ngram algorithm

    feat(tokenizer): adds basic ngram algorithm

    This PR aims to add an n-gram tokenization step to Lyra.

    Using the tests/datasets/events.json dataset, shows that the total index size increases by around 7% when using a trigram (in JSON, from 41MB to 44MB). This number could decrease once we implement the direct acyclic graph data structure for storing the data.

    opened by micheleriva 0
  • Remove browser entry point in package.json after expo supports webpack 5

    Remove browser entry point in package.json after expo supports webpack 5

    The browser entry point in package.json was added in #120 to allow support for expo which uses webpack 4 (see details in that PR). Once expo supports webpack 5 (probably in https://github.com/expo/expo-cli/pull/3763 ), we can remove the browser TS compilation and package.json entry point.

    opened by codyzu 0
  • Broken examples and benchmarks after monorepo refactor

    Broken examples and benchmarks after monorepo refactor

    Describe the bug Commit d0f95d789ed80de2f8ebc31eedee5e72c0a27877 broke the react example (App.tsx was deleted) and deleted the benchmarks. Was this intentional? Do you want a PR to clean this up or add them back?

    opened by codyzu 1
  • Allow passing custom IDs and doc updating

    Allow passing custom IDs and doc updating

    Is your feature request related to a problem? Please describe. Hi, I have documents that already have their own unique IDs, and when those docs are updated I want to be able to tell Lyra to update the index with that doc in mind. Currently I can do this like so:

    1. const {id: lyraId} = insert(db, doc)
    2. lyraMap[MY_DOC_ID] = lyraId
    3. an edit is made to MY_DOC_ID
    4. const lyraId = lyraMap[MY_DOC_ID]
    5. remove(db, lyraId)
    6. const {id: newLyraId} = insert(db, doc)
    7. lyraMap[MY_DOC_ID] = newLyraId

    This is far too involved imo.

    Describe the solution you'd like The ability to pass a custom ID into the insert function, followed by an update function that efficiently updates the index with that record in mind. Or just modify the insert function to be more of an upsert method, e.g. you can always call something like insert(db, doc, {id: MY_ID}) and it will do the right thing (based on whether the ID already exists or not). If no ID is passed initially then an ID is generated as is the case now.

    opened by acnebs 2
  • Relevance of schema fields

    Relevance of schema fields

    Is your feature request related to a problem? Please describe. It would be great if the schema could allow specifying the relevance for individual fields. For example, if you have a schema with a title and a content field, then in many cases a match on the title implies that the result is more relevant than others where the keyword just matches on the content.

    Describe the solution you'd like Here is an example API that makes title 10x more important for ranking than content:

    const db = create({
      schema: {
        content: {relevance: 10, type: 'string'},
        title: {relevance: 100, type: 'string'},
      },
    });
    

    Describe alternatives you've considered One could issue multiple calls to search, for each property, and then manually merge the results and rank them. That's a lot of work!

    discussion 
    opened by cpojer 4
Releases(0.2.4)
  • 0.2.4(Sep 12, 2022)

    What's Changed

    • chore: release automation by @simoneb in https://github.com/LyraSearch/lyra/pull/130
    • feat(lyra): compute levenshtein metric within a given tolerance by @jkomyno in https://github.com/LyraSearch/lyra/pull/131

    New Contributors

    • @simoneb made their first contribution in https://github.com/LyraSearch/lyra/pull/130
    • @jkomyno made their first contribution in https://github.com/LyraSearch/lyra/pull/131

    Full Changelog: https://github.com/LyraSearch/lyra/compare/0.2.3...0.2.4

    Source code(tar.gz)
    Source code(zip)
  • 0.2.3(Sep 7, 2022)

    What's Changed

    • fix(stemmer): fix handling of stemmer imports by @codyzu in https://github.com/LyraSearch/lyra/pull/128

    Full Changelog: https://github.com/LyraSearch/lyra/compare/0.2.2...0.2.3

    Source code(tar.gz)
    Source code(zip)
  • 0.2.2(Sep 6, 2022)

    What's Changed

    • feat(package): add proper support for webpack 4 which is used by expo by @codyzu in https://github.com/LyraSearch/lyra/pull/120
    • chore(package): remove broken npm run scripts by @codyzu in https://github.com/LyraSearch/lyra/pull/122
    • build(package): builds the package on prepare, allowing for git dependencies by @codyzu in https://github.com/LyraSearch/lyra/pull/123
    • build(package): use npm for build to allow for vanilla install from git and github by @codyzu in https://github.com/LyraSearch/lyra/pull/125
    • feat(stemmer): adds snowball-generated stemmers by @micheleriva in https://github.com/LyraSearch/lyra/pull/124

    Full Changelog: https://github.com/LyraSearch/lyra/compare/0.2.1...0.2.2

    Source code(tar.gz)
    Source code(zip)
  • 0.2.1(Sep 4, 2022)

    What's Changed

    • feat(tokenizer): adds stop words by @micheleriva in https://github.com/LyraSearch/lyra/pull/111
    • fix: replace setImmediate with setTimeout by @sidwebworks in https://github.com/LyraSearch/lyra/pull/113
    • fix(insertion-checker): fix crash when warning on react-native by @codyzu in https://github.com/LyraSearch/lyra/pull/116
    • feat(tokenizer): makes it possible to override the default tokenizer with a custom one by @micheleriva in https://github.com/LyraSearch/lyra/pull/118
    • ci(ci): removes benchmark workflow by @micheleriva in https://github.com/LyraSearch/lyra/pull/119

    New Contributors

    • @sidwebworks made their first contribution in https://github.com/LyraSearch/lyra/pull/113
    • @codyzu made their first contribution in https://github.com/LyraSearch/lyra/pull/116

    Full Changelog: https://github.com/LyraSearch/lyra/compare/0.2.0...0.2.1

    Source code(tar.gz)
    Source code(zip)
  • 0.2.0(Aug 29, 2022)

    What's Changed

    • feat(stemmer): adds English stemmer by @micheleriva in https://github.com/LyraSearch/lyra/pull/109
    • feat: implement hook system by @RafaelGSS in https://github.com/LyraSearch/lyra/pull/110

    Full Changelog: https://github.com/LyraSearch/lyra/compare/0.1.4...0.2.0

    Source code(tar.gz)
    Source code(zip)
  • 0.1.4(Aug 27, 2022)

    What's Changed

    • chore(package.json): add description and correct license name by @iShibi in https://github.com/LyraSearch/lyra/pull/105
    • feat(lyra): adds batchInsert async method by @micheleriva in https://github.com/LyraSearch/lyra/pull/106
    • fix(errors): fixes error messages referring to old Lyra class-based i… by @micheleriva in https://github.com/LyraSearch/lyra/pull/107

    Full Changelog: https://github.com/LyraSearch/lyra/compare/0.1.3...0.1.4

    Source code(tar.gz)
    Source code(zip)
  • 0.1.3(Aug 26, 2022)

  • 0.1.2(Aug 26, 2022)

    What's Changed

    • fix: check for hrtime func availability by @castarco in https://github.com/LyraSearch/lyra/pull/102
    • chore(lyra): export tokenizer function by @micheleriva [3e6df9a86c56b4359c2f6424d259be3b925c91f0]

    Full Changelog: https://github.com/LyraSearch/lyra/compare/0.1.1...0.1.2

    Source code(tar.gz)
    Source code(zip)
  • 0.1.1(Aug 23, 2022)

  • 0.1.0(Aug 23, 2022)

    0.1.0

    23 August 2022

    • chore(lyra): BREAKING CHANGE changes org to lyrasearch [8003f5cbf06c8c22b960ca0b1b3e4943f9e47013]
    • fix(lyra): throws an error when trying to override the "id" schema property #100
    • docs(changelog): updates changelog 9a43b20
    Source code(tar.gz)
    Source code(zip)
  • 0.0.5(Aug 21, 2022)

    0.0.5

    21 August 2022

    • refactor: improve types in repl.ts #96
    • refactor: fix some minor linter warnings #95
    • docs: add inline documentation #91
    • docs: fix typo in example import statements #92
    • Demo page improvements and restyling #81
    • fix(lyra): removes access to process and performance global variable if not supported in the runtime #98
    • refactor(docs): removes docs from monorepo b28c6cb
    • refactor(docs): removes docs workflow c358373
    • docs: updates changelog 81a78c0
    Source code(tar.gz)
    Source code(zip)
  • 0.0.4(Aug 9, 2022)

    0.0.4

    9 August 2022

    • chore: update benchmarks to run only on main #90
    • chore: add benchmark-comparisson workflow #89
    • fix: intelliSense not working for some params of insert/search #86
    • feat(benchmarks): adds comparision with other libraries c52189f
    • feat(lyra): adds possibility to save and load Lyra schema 290c8a2
    • refactor(edge): removes edge package 50e44ad
    Source code(tar.gz)
    Source code(zip)
  • 0.0.3(Aug 5, 2022)

  • 0.0.2(Aug 4, 2022)

  • 0.0.1(Aug 2, 2022)

    0.0.1

    2 August 2022

    • Add Lyra implementation example with Vue #73
    • Improve React Example #72
    • Proof reading #68
    • Better docs #65
    • docs: delete method to remove method #67
    • Feat/remove natural #60
    • Simple structures #55
    • fix(docs): Fixes guide README #54
    • fix(benchmarks): Fixes typo into the generating of README.md file #53
    • perf: prevent potential overhead on falsy value #46
    • Remove by word should consider other doc ids #45
    • Add exact param in remove doc by word method #41
    • Prevent undefined elements #33
    • feat(lyra): adds possibility to disable stemming globally #30
    • Add Stemmer tests #25
    • perf(benchmarks): improves benchmarks #26
    • test(lyra): improves test coverage #23
    • Typed search properties to match schema #22
    • Typed hits property in search method #21
    • Typed Lyra.insert method according to the schema used #20
    • fix(benchmark start command): bennchmark start command and files import #19
    • Support for nested schema #17
    • feat(lyr): adds typo tolerance #11
    • fix(lyra): fixes case where Lyra won't remove a document from the index #52
    • fix(lyra): fixes error when deleting non-string properties #66
    • chore(lyra): fixes publication issue #27
    • test(lyra): improves tests 94797aa
    • refactor(docs): renames 'lyra-docs' package into 'docs' 744f5ca
    • refactor(docs): removes old docs 1ce9d2d
    Source code(tar.gz)
    Source code(zip)
  • 0.0.1-beta-19(Aug 2, 2022)

    Changelog

    All notable changes to this project will be documented in this file. See standard-version for commit guidelines.

    0.0.1-beta-19 (2022-08-02)

    Fix

    • fix(lyra): fixes case where Lyra won't remove a document from the index (491b6f5b823f4a85cb8865029c9f2f5d261d5a4e) @micheleriva

    Tests

    • tests(lyra): improves document removal tests (ad17925d1bb5a614c1c8384d7ba7eb03280dc10b) @micheleriva

    Docs

    • docs: updates docs (70aa889e44ac09afcdf0b1393ddffa94c392e28a) @micheleriva
    Source code(tar.gz)
    Source code(zip)
  • 0.0.1-beta-18(Aug 1, 2022)

    Changelog

    All notable changes to this project will be documented in this file. See standard-version for commit guidelines.

    0.0.1-beta-18 (2022-08-01)

    Fix

    • fix(lyra): fixes duplicated results when search term appears in multiple properties (f813865) @micheleriva
    • fix(development-repl): fixes search in development repl (7070e18) @micheleriva

    Chore

    • chore(development-repl): adds basic development repl (257e759) @micheleriva

    Refactor

    • refactor(docs): renames 'lyra-docs' package into 'docs' (744f5ca) @micheleriva

    Docs

    • docs: renames "delete" method to "remove" (#67) @thomscoder
    • Better docs (#65) @thomscoder
    • Proof reading (#68) @thomscoder
    Source code(tar.gz)
    Source code(zip)
  • 0.0.1-beta-17(Jul 30, 2022)

    Changelog

    All notable changes to this project will be documented in this file. See standard-version for commit guidelines.

    0.0.1-beta-17 (2022-07-30)

    Fix

    • build(lyra): fixes the build process (c327cda) @micheleriva

    Chore

    • chore: adds CONTRIBUTING.md file (66ce5ce) @micheleriva
    Source code(tar.gz)
    Source code(zip)
  • 0.0.1-beta-16(Jul 30, 2022)

    Changelog

    All notable changes to this project will be documented in this file. See standard-version for commit guidelines.

    0.0.1-beta-16 (2022-07-30)

    Features

    • BREAKING refactor(lyra): removes natural as dependency (d472a469e437ba280385c7092370bc24c0dd3c3f) @micheleriva
    Source code(tar.gz)
    Source code(zip)
  • 0.0.1-beta-15(Jul 29, 2022)

    Changelog

    All notable changes to this project will be documented in this file. See standard-version for commit guidelines.

    0.0.1-beta-15 (2022-07-29)

    Features

    • feat(lyra): adds index and docs getters and setters (@ShogunPanda) (0a3609a648268db8b9e410755e064e5f4a92f55f)
    • feat(lyra): adds basic getters and setters for docs and indexes, switches from maps back to objects (@ShogunPanda) (0a3609a648268db8b9e410755e064e5f4a92f55f)
    • feat(lyra): simplify serialization (@ShogunPanda) (0a3609a648268db8b9e410755e064e5f4a92f55f)
    • feat(lyra): do not use async when not needed (@ShogunPanda) (0a3609a648268db8b9e410755e064e5f4a92f55f)
    • feat(lyra): do not use classes (@ShogunPanda) (0a3609a648268db8b9e410755e064e5f4a92f55f)
    • chore(lyra): adds license to fast-properties lib (@micheleriva) (0a3609a648268db8b9e410755e064e5f4a92f55f)
    • chore(lyra): moves error handling to standard error function (@micheleriva) (0a3609a648268db8b9e410755e064e5f4a92f55f)
    • chore(lyra): adds missing dependencies (@micheleriva) (0a3609a648268db8b9e410755e064e5f4a92f55f)

    Chore

    • chore: added prettier configuration (@ShogunPanda) (0a3609a648268db8b9e410755e064e5f4a92f55f)

    Tests

    • tests(lyra): remove async awaits from tests (@ShogunPanda) (0a3609a648268db8b9e410755e064e5f4a92f55f)

    Docs

    • fix(benchmarks): Fixes typo into the generating of README.md file (#53) (f72a6bb) @Frenzarectah
    • fix(docs): Fixes guide README (#54) (02b11c8f032bb82b297880a5c138f95bdd447611) @bozzelliandrea

    Aknowledgements

    A massive thank you to @ShogunPanda for the incredible work on this release!

    Source code(tar.gz)
    Source code(zip)
  • 0.0.1-beta-14(Jul 25, 2022)

    Changelog

    All notable changes to this project will be documented in this file. See standard-version for commit guidelines.

    0.0.1-beta-14 (2022-07-25)

    Fix

    • fix(lyra): prevents undefined elements (#33) (4f8b24b) @mateonunez
    • fix(lyra): adds exact param in remove doc by word method (#41) (6f665d3) @mateonunez
    • fix(lyra): fixes remove by word should consider other doc ids (#45) (1cb8f3f) @mateonunez

    Performance

    • perf(lyra): prevent potential overhead on falsy value (#46) (5b05371) @mateonunez

    CI

    • ci(benchmarks): fixes gh workflow (c930e4e) @micheleriva
    • ci(benchmarks): deletes benchmark table before adding new result (11d4323) @micheleriva

    Benchmarks

    • chore(benchmarks): refactors imdb dataset script to bash (0e368ab) @micheleriva
    • chore(benchmarks): update benchmark table (a0e6885) @micheleriva

    Tests

    • test(lyra): removes skips to stemming tests (41069fa) @micheleriva

    Aknownledgements

    A special thank you to @lucaong who spotted a bug in a merged PR and helped fix it πŸ™

    Source code(tar.gz)
    Source code(zip)
  • 0.0.1-beta-13(Jul 19, 2022)

    Changelog

    All notable changes to this project will be documented in this file. See standard-version for commit guidelines.

    0.0.1-beta-13 (2022-07-19)

    Features

    • feat(lyra): adds possibility to disable stemming globally (ac13fb7) @micheleriva
    Source code(tar.gz)
    Source code(zip)
  • 0.0.1-beta-12(Jul 18, 2022)

    Changelog

    All notable changes to this project will be documented in this file. See standard-version for commit guidelines.

    0.0.1-beta-12 (2022-07-18)

    Features

    • perf(benchmarks): improves benchmarks (#26) (ac13fb7) @micheleriva

    Tests

    • tests(lyra): adds stemmer tests (5c60972) @mateonunez
    • test(lyra): improves test coverage (#23) (7a82bcb) @micheleriva
    Source code(tar.gz)
    Source code(zip)
  • 0.0.1-beta-11(Jul 18, 2022)

    Changelog

    All notable changes to this project will be documented in this file. See standard-version for commit guidelines.

    0.0.1-beta-11 (2022-07-18)

    Features

    • feat(lyra) : Adds typed search properties to match schema (1626a92) @DanieleFedeli
    • feat(lyra): Adds typed hits property in search method (971d773) @DanieleFedeli
    • feat(lyra): Adds typed Lyra.insert method according to the schema used (78f97db) @DanieleFedeli
    • feat(lyra): Adds support to nested schema (d1d90e5) @DanieleFedeli

    Bug Fixes

    • style(types): fixes ts linting errors (dd65b9e) @micheleriva
    • fix(benchmark start command): fixes bennchmark start command and files import (441d014) @ilteoood
    • docs(docs): fixes typos in schema creation examples (6a68d5d) @micheleriva
    Source code(tar.gz)
    Source code(zip)
  • 0.0.1-beta-10(Jul 14, 2022)

  • 0.0.1-beta-9(Jul 13, 2022)

    Changelog

    All notable changes to this project will be documented in this file. See standard-version for commit guidelines.

    0.0.1-beta-9 (2022-07-13)

    Features

    • adds exact match search (ea8a516)

    Docs

    • adds exact match search docs (d823f5b)

    Misc

    • adds unit tests for utils (741b982)

    Many thanks @mateonunez for your work on this release!

    Source code(tar.gz)
    Source code(zip)
  • 0.0.1-beta-8(Jul 12, 2022)

    Changelog

    All notable changes to this project will be documented in this file. See standard-version for commit guidelines.

    0.0.1-beta-8 (2022-07-12)

    Features

    • adds search hits, elapsed time, and count (b2a23c0)
    • lyra: adds "default language" configuration in class initializer (c12aec4)
    • lyra: adds "offset" compliance (0d5e464)
    • lyra: adds "remove" method to remove a doc (7000232)
    • lyra: adds ability to calculate microseconds-precision elapsed time on browsers (1287772)
    • lyra: adds guards to language analyzer settings (0fa4078)
    • lyra: adds schema check on document insertion (23f223d)
    • lyra: adds search methods (6fac8f2)
    • lyra: adds stemming capabilities during indexing and search (246bdc9)
    • lyra: improves search efficiency by implementing lazy search (68ba667)
    • lyra: improves search speed by pre-generating final array of results (2860ca0)

    Bug Fixes

    • docs: fixes base url in docs (7ad2e78)
    • docs: fixes baseurl in vuepress (0c52e1e)
    • docs: fixes docs links (abc90ae)
    • lyra: fixes parse error while indexing non-searchable fields (f0e1eae)
    • lyra: fixes performance calculation on browsers (41f903a)
    • lyra: fixes types and license entries in package.json (cf8f2d4)
    Source code(tar.gz)
    Source code(zip)
  • 0.0.1-beta-7(Jun 11, 2022)

    0.0.1-beta-7 (2022-06-11)

    Chores
    • lyra: updates lyra version for npm (337ba7f)
    Features
    • lyra:
      • adds guards to language analyzer settings (0fa4078)
      • adds "default language" configuration in class initialize (c12aec4)
    Docs
    • docs:
      • merge Fix docs (#3) @MatteoGheza
      • adds explaination about input analyzer (748a745)
    Source code(tar.gz)
    Source code(zip)
  • 0.0.1-beta-6(Jun 8, 2022)

    0.0.1-beta-6 (2022-06-08)

    Chores
    • lyra: upgrade npm version (06247fe8)
    Performance Improvements
    • lyra:
      • refactored trie properties to use maps instead of objects (af0c7ef0)
      • removes useless operations while working on input strings (9161aa33)
    Source code(tar.gz)
    Source code(zip)
  • 0.0.1-beta-5(Jun 8, 2022)

    0.0.1-beta-5 (2022-06-08)

    Chores
    • lyra: update npm version (62dfec80)
    New Features
    • lyra: adds stemming capabilities during indexing and search (246bdc9d)
    Source code(tar.gz)
    Source code(zip)
A personal semantic search engine capable of surfacing relevant bookmarks, journal entries, notes, blogs, contacts, and more, built on an efficient document embedding algorithm and Monocle's personal search index.

Revery ?? Revery is a semantic search engine that operates on my Monocle search index. While Revery lets me search through the same database of tens o

Linus Lee 197 Sep 18, 2022
An efficient (and the fastest!) way to search the web privately using Brave Search Engine

Brave Search An efficient (and the fastest) way to search the web privately using Brave Search Engine. Not affiliated with Brave Search. Tested on Chr

Jishan Shaikh 7 Jun 2, 2022
Full text search based on InvertedIndex and ordinary approach

The Node js project that has CRUD operation and has a FullTextSearch.

Ali Nowrouzi 5 Jul 15, 2022
Adds full-text search to Community Solid Server. Powered by atomic-server

Solid Search for Community Solid Server This is an extension / plugin for the Community Solid Server. It adds full-text search to the Community Solid

Ontola 4 Jun 6, 2022
A flexible, memory compact, fast and dynamic CSG implementation on top of three-mesh-bvh

three-bvh-csg An experimental, in progress, flexible, memory compact, fast and dynamic CSG implementation on top of three-mesh-bvh. More than 100 time

Garrett Johnson 145 Sep 16, 2022
Full-stack-todo-rust-course - we are building this out now in prep for the real course

full-stack-todo-rust-course wip - we are building this out now in prep for the real course Plan Come up with the requirements Create user stories Desi

Brooks Builds 25 Aug 18, 2022
@TGMusicfy - Minimalistic Telegram music search bot written in TypeScript and based on Telegraf and Express JS.

@TGMusicfy Go to bot Deployed thanks to Heroku and New-Relic Bots are special Telegram accounts designed to handle messages automatically. Users can i

Saveliy Andronov 5 Sep 13, 2022
🌸 A fast and fun way to learn Japanese alphabets: hiragana & katakana. Don't wait - learn now!

Sakurator | Start learning ζ—₯本θͺž here Sakurator (Website publish date: ~4-6 April '22) - a personal trainer for learning Japanese alphabets (hiragana &

Anatoly Frolov 3 Jun 22, 2022
Tesodev-search-app - Personal Search App with React-Hooks

Tesodev-search-app Personal Search App with React-Hooks View on Heroku : [https://tesodev-staff-search-app.herokuapp.com/] Instructions Clone this rep

Rahmi KΓΆse 2 Jan 22, 2022
Instant spotlight like search and actions in your browser with Sugu Search.

Sugu Search Instant spotlight like search and actions in your browser with Sugu Search. Developed by Drew Hutton Grab it today for Firefox and Chrome

Drew Hutton (Yoroshi) 8 May 20, 2022
🍭 search-buddy ultra lightweight javascript plugin that can help you create instant search and/or facilitate navigation between pages.

?? search-buddy search-buddy is an open‑source ultra lightweight javascript plugin (* <1kb). It can help you create instant search and/or facilitate n

Michael 4 Jun 16, 2022
Node starter kit for semantic-search. Uses Mighty Inference Server with Qdrant vector search.

Mighty Starter This project provides a complete and working semantic search application, using Mighty Inference Server, Qdrant Vector Search, and an e

MAX.IO LLC 7 Jul 26, 2022
Allows users to quickly search highlighted items on Wikipedia. Inspired by the "search Wikipedia" function on the kindle mobile app.

wikipedia-search Allows users to quickly search highlighted items on Wikipedia. Inspired by the "search Wikipedia" function on the kindle mobile app.

Laith Alayassa 18 Aug 15, 2022
A plugin for Obsidian (https://obsidian.md) that adds a button to its search view for copying the Obsidian search URL.

Copy Search URL This plugin adds a button to Obsidian's search view. Clicking it will copy the Obsidian URL for the current search to the clipboard. T

Carlo Zottmann 2 Sep 20, 2022
Search Engine for YouTuber Ali Abdaal's videos

Ali Abdaal Search Engine This is a personalized search engine for my favorite YouTubers, Ali Abdaal. I used selenium to scrape all his videos, youtube

Hassan El Mghari 23 Mar 9, 2022
Chappe - πŸ§‘β€πŸ’» Developer Docs builder. Write guides in Markdown and references in API Blueprint. Comes with a built-in search engine.

Chappe Developer Docs builder. Write guides in Markdown and references in API Blueprint. Comes with a built-in search engine. Chappe is a Developer Do

Valerian Saliou 132 Sep 16, 2022
MLPleaseHelp is a simple ML resource search engine.

README MLPleaseHelp is a simple ML resource search engine. How To Use You can use this search engine right now at https://jgreenemi.github.io/MLPlease

Joseph Greene 5 Jan 20, 2021
πŸ§‘β€πŸ’» Developer Docs builder. Write guides in Markdown and references in API Blueprint. Comes with a built-in search engine.

Developer Docs builder. Write guides in Markdown and references in API Blueprint. Comes with a built-in search engine. Chappe is a Developer Docs buil

Crisp (OSS) 132 Sep 16, 2022
Yu-Gi-Oh! Card Search Engine

Yu-Gi-Oh! Card Search Engine Buscador de cartas de Yu-Gi-Oh, os resultados sΓ£o apresentados em PT-BR. Algumas cartas podem nΓ£o ser encontradas devido

Evandro Fadul 11 Apr 14, 2022