Freetext Search

Testing free text search execution times on a collection of 95 strings each ~3500 words in length.

by sdgluck

HTML

<script src="https://cdnjs.cloudflare.com/ajax/libs/Faker/3.0.1/faker.min.js"></script>
<input type="text" placeholder="Search..." />
<div></div>
<ul></ul>

JavaScript

"use strict";

$(document).ready(function() {
    let $ul = $('ul');
    let $div = $('div');
    let data = [];

    makeData(95);

    $('input').on('keyup', function() {
        let query = $(this).val();
        let now = Date.now();

        $ul.empty();

        if(query.length) {
            for(let i = 0; i < data.length; i++) {
                let item = data[i];

                if(
                    item.title.indexOf(query) > -1 ||
                    item.description.indexOf(query) > -1 ||
                    item.details.indexOf(query) > -1
                ) {
                    $ul.append('<li>' + item.title.substring(0, 50) + '...</li>');
                }
            }
        }

        $div.html(
            'queried in ' + (Date.now() - now) / 1000 + ' seconds<br>' + 
            $ul.children().length + ' results'
        );
    });

    function makeData(num) {
        let lorem = "";

        for(let i = 0; i < 4; i++) {
            lorem += faker.lorem.paragraphs();
        }

        data.push({
            title: lorem.substring(0, 250),
            description: lorem.substring(0, 250),
            details: lorem.substring(0, 2500)
        });

        if(--num) {
            makeData(num);
        }
    }
});