{"id":13514603,"url":"https://github.com/nextapps-de/bulksearch","last_synced_at":"2025-06-10T11:13:02.477Z","repository":{"id":50138851,"uuid":"121946963","full_name":"nextapps-de/bulksearch","owner":"nextapps-de","description":"Lightweight and read-write optimized full text search library.","archived":false,"fork":false,"pushed_at":"2021-06-02T21:55:54.000Z","size":267,"stargazers_count":111,"open_issues_count":4,"forks_count":8,"subscribers_count":3,"default_branch":"master","last_synced_at":"2025-04-21T02:55:05.608Z","etag":null,"topics":["full-text-search","fulltext-search","javascript","javascript-library","node-module","nodejs","open-source","search","search-algorithm","search-engine","search-in-text","searching","searching-algorithms","standalone","web"],"latest_commit_sha":null,"homepage":"","language":"HTML","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/nextapps-de.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2018-02-18T11:49:12.000Z","updated_at":"2024-12-07T20:18:05.000Z","dependencies_parsed_at":"2022-09-02T14:00:53.603Z","dependency_job_id":null,"html_url":"https://github.com/nextapps-de/bulksearch","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nextapps-de%2Fbulksearch","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nextapps-de%2Fbulksearch/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nextapps-de%2Fbulksearch/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nextapps-de%2Fbulksearch/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/nextapps-de","download_url":"https://codeload.github.com/nextapps-de/bulksearch/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":251691610,"owners_count":21628356,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["full-text-search","fulltext-search","javascript","javascript-library","node-module","nodejs","open-source","search","search-algorithm","search-engine","search-in-text","searching","searching-algorithms","standalone","web"],"created_at":"2024-08-01T05:00:58.383Z","updated_at":"2025-04-30T11:33:23.562Z","avatar_url":"https://github.com/nextapps-de.png","language":"HTML","readme":"# BulkSearch\n\n### Lightweight and read-write optimized full text search library.\n\nWhen it comes to the __overall speed__, BulkSearch outperforms every searching library out there and also provides flexible search capabilities like multi-word matching, phonetic transformations or partial matching. It is essentially based on how a HDD manages files in a filesystem. Adding, updating or removing items are as fast as searching for them, but also consumes some additional memory. When your index doesn't need to be updated frequently then \u003ca href=\"flexsearch/\" target=\"_blank\"\u003eFlexSearch\u003c/a\u003e may be a better choice. BulkSearch also provides you a asynchronous processing model to perform queries in the background. \n\nBenchmark:\n- Comparison: \u003ca href=\"https://jsperf.com/compare-search-libraries\" target=\"_blank\"\u003ehttps://jsperf.com/compare-search-libraries\u003c/a\u003e\n- Detailed: \u003ca href=\"https://jsperf.com/bulksearch\" target=\"_blank\"\u003ehttps://jsperf.com/bulksearch\u003c/a\u003e\n\nSupported Platforms:\n- Browser\n- Node.js\n\nSupported Module Definitions:\n- AMD (RequireJS)\n- CommonJS (Node.js)\n- Closure (Xone)\n- Global (Browser)\n\nAll Features:\n\u003cul\u003e\n    \u003cli\u003ePartial Words\u003c/li\u003e\n    \u003cli\u003eMultiple Words\u003c/li\u003e\n    \u003cli\u003eFlexible Word Order\u003c/li\u003e\n    \u003cli\u003e\u003ca href=\"#phonetic\"\u003ePhonetic Search\u003c/a\u003e\u003c/li\u003e\n    \u003cli\u003eLimit Results\u003c/li\u003e\n    \u003cli\u003e\u003ca href=\"#pagination\"\u003ePagination\u003c/a\u003e\u003c/li\u003e\n    \u003cli\u003eCaching\u003c/li\u003e\n    \u003cli\u003eAsynchronous Mode\u003c/li\u003e\n    \u003cli\u003eCustom Matchers\u003c/li\u003e\n    \u003cli\u003eCustom Encoders\u003c/li\u003e\n\u003c/ul\u003e\n\n## Installation\n\n##### HTML / Javascript\n\n```html\n\u003chtml\u003e\n\u003chead\u003e\n    \u003cscript src=\"js/bulksearch.min.js\"\u003e\u003c/script\u003e\n\u003c/head\u003e\n...\n```\n__Note:__ Use _bulksearch.min.js_ for production and _bulksearch.js_ for development.\n\nUse latest from CDN:\n```html\n\u003cscript src=\"https://cdn.rawgit.com/nextapps-de/bulksearch/master/bulksearch.min.js\"\u003e\u003c/script\u003e\n```\n\n##### Node.js\n\n```npm\nnpm install bulksearch\n```\n\nIn your code include as follows:\n\n```javascript\nvar BulkSearch = require(\"bulksearch\");\n```\n\nOr pass in options when requiring:\n\n```javascript\nvar index = require(\"bulksearch\").create({/* options */});\n```\n\n__AMD__\n\n```javascript\nvar BulkSearch = require(\"./bulksearch.js\");\n```\n\n#### Compare BulkSearch vs. FlexSearch\n\n\u003ctable\u003e\n    \u003ctr\u003e\u003c/tr\u003e\n    \u003ctr\u003e\n        \u003cth align=\"left\"\u003eDescription\u003c/th\u003e\n        \u003cth align=\"left\"\u003eBulkSearch\u003c/th\u003e\n        \u003cth align=\"left\"\u003eFlexSearch\u003c/th\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n        \u003ctd\u003eAccess\u003c/td\u003e\n        \u003ctd\u003eRead-Write optimized index\u003c/td\u003e\n        \u003ctd\u003eRead-Memory optimized index\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\u003c/tr\u003e\n    \u003ctr\u003e\n        \u003ctd\u003eMemory\u003c/td\u003e\n        \u003ctd\u003eLarge (~ 90 bytes per word)\u003c/td\u003e\n        \u003ctd\u003eTiny (~ 2 bytes per word)\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\u003c/tr\u003e\n    \u003ctr\u003e\n        \u003ctd\u003eUsage\u003c/td\u003e\n        \u003ctd\u003e\u003cul\u003e\u003cli\u003eLimited content\u003c/li\u003e\u003cli\u003eIndex updates continously\u003c/li\u003e\u003c/ul\u003e\u003c/td\u003e\n        \u003ctd\u003e\u003cul\u003e\u003cli\u003eFastest possible search\u003c/li\u003e\u003cli\u003eRare updates on index\u003c/li\u003e\u003cli\u003eLow memory capabilities\u003c/li\u003e\u003c/ul\u003e\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\u003c/tr\u003e\n    \u003ctr\u003e\n        \u003ctd\u003eLimit Results\u003c/td\u003e\n        \u003ctd\u003eYes\u003c/td\u003e\n        \u003ctd\u003eYes\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\u003c/tr\u003e\n    \u003ctr\u003e\n        \u003ctd\u003ePagination\u003c/td\u003e\n        \u003ctd\u003eYes\u003c/td\u003e\n        \u003ctd\u003eNo\u003c/td\u003e\n    \u003c/tr\u003e\n\u003c/table\u003e\n\n## API Overview\n\nGlobal methods:\n- \u003ca href=\"#bulksearch.create\"\u003eBulkSearch.__create__(\\\u003coptions\\\u003e)\u003c/a\u003e\n- \u003ca href=\"#bulksearch.addmatcher\"\u003eBulkSearch.__addMatcher__({_KEY: VALUE_})\u003c/a\u003e\n- \u003ca href=\"#bulksearch.register\"\u003eBulkSearch.__register__(name, encoder)\u003c/a\u003e\n- \u003ca href=\"#bulksearch.encode\"\u003eBulkSearch.__encode__(name, string)\u003c/a\u003e\n\nIndex methods:\n- \u003ca href=\"#index.add\"\u003eIndex.__add__(id, string)\u003c/a\u003e\n- \u003ca href=\"#index.search1\"\u003eIndex.__search__(string, \\\u003climit\\\u003e, \\\u003ccallback\\\u003e)\u003c/a\u003e\n- \u003ca href=\"#index.search2\"\u003eIndex.__search__(string, \\\u003cpage\\\u003e, \\\u003ccallback\\\u003e)\u003c/a\u003e\n- \u003ca href=\"#index.search3\"\u003eIndex.__search__(options, \\\u003ccallback\\\u003e)\u003c/a\u003e\n- \u003ca href=\"#index.update\"\u003eIndex.__update__(id, string)\u003c/a\u003e\n- \u003ca href=\"#index.remove\"\u003eIndex.__remove__(id)\u003c/a\u003e\n- \u003ca href=\"#index.reset\"\u003eIndex.__reset__()\u003c/a\u003e\n- \u003ca href=\"#index.destroy\"\u003eIndex.__destroy__()\u003c/a\u003e\n- \u003ca href=\"#index.init\"\u003eIndex.__init__(\\\u003coptions\\\u003e)\u003c/a\u003e\n- \u003ca href=\"#index.optimize\"\u003eIndex.__optimize__()\u003c/a\u003e\n- \u003ca href=\"#index.info\"\u003eIndex.__info__()\u003c/a\u003e\n- \u003ca href=\"#index.addmatcher\"\u003eIndex.__addMatcher__({_KEY: VALUE_})\u003c/a\u003e\n- \u003ca href=\"#index.encode\"\u003eIndex.__encode__(string)\u003c/a\u003e\n\n## Usage\n\u003ca name=\"bulksearch.create\"\u003e\u003c/a\u003e\n#### Create Index\n\n\u003e BulkSearch.__create(\\\u003coptions\\\u003e)__\n\n```js\nvar index = new BulkSearch();\n```\n\nalternatively you can also use:\n\n```js\nvar index = BulkSearch.create();\n```\n\n##### Create index with custom options\n\n```js\nvar index = new BulkSearch({\n\n    // default values:\n\n    type: \"integer\",\n    encode: \"icase\",\n    boolean: \"and\",\n    size: 4000,\n    multi: false,\n    strict: false,\n    ordered: false,\n    paging: false,\n    async: false,\n    cache: false\n});\n```\n\n__Read more:__ \u003ca href=\"#phonetic\"\u003ePhonetic Search\u003c/a\u003e, \u003ca href=\"#compare\"\u003ePhonetic Comparison\u003c/a\u003e, \u003ca href=\"#memory\"\u003eImprove Memory Usage\u003c/a\u003e\n\u003ca name=\"index.add\"\u003e\u003c/a\u003e\n#### Add items to an index\n\n\u003e Index.__add(id, string)__\n\n```js\nindex.add(10025, \"John Doe\");\n```\n\u003ca name=\"index.search1\"\u003e\u003c/a\u003e\n#### Search items\n\n\u003e Index.__search(string|options, \\\u003climit|page\\\u003e, \\\u003ccallback\\\u003e)__\n\n```js\nindex.search(\"John\");\n```\n\nLimit the result:\n\n```js\nindex.search(\"John\", 10);\n```\n\nPerform queries asynchronously:\n\n```js\nindex.search(\"John\", function(result){\n    \n    // array of results\n});\n```\n\u003ca name=\"index.search3\"\u003e\u003c/a\u003e\nPass parameter as an object:\n```js\nindex.search({\n\n    query: \"John\", \n    page: '1:1234',\n    limit: 10,\n    callback: function(result){\n        \n        // async\n    }\n});\n```\n\u003ca name=\"index.update\"\u003e\u003c/a\u003e\n#### Update item from an index\n\n\u003e Index.__update(id, string)__\n\n```js\nindex.update(10025, \"Road Runner\");\n```\n\u003ca name=\"index.remove\"\u003e\u003c/a\u003e\n#### Remove item from an index\n\n\u003e Index.__remove(id)__\n\n```js\nindex.remove(10025);\n```\n\u003ca name=\"index.reset\"\u003e\u003c/a\u003e\n#### Reset index\n\n```js\nindex.reset();\n```\n\u003ca name=\"index.destroy\"\u003e\u003c/a\u003e\n#### Destroy index\n\n```js\nindex.destroy();\n```\n\u003ca name=\"index.init\"\u003e\u003c/a\u003e\n#### Re-Initialize index\n\n\u003e Index.__init(\\\u003coptions\\\u003e)__\n\n__Note:__ Re-initialization will also destroy the old index!\n\nInitialize (with same options):\n```js\nindex.init();\n```\n\nInitialize with new options:\n```js\nindex.init({\n\n    /* options */\n});\n```\n\u003ca name=\"bulksearch.addmatcher\"\u003e\u003c/a\u003e\n#### Add custom matcher\n\n\u003e BulkSearch.__addMatcher({_REGEX: REPLACE_})__\n\nAdd global matchers for all instances:\n```js\nBulkSearch.addMatcher({\n\n    'ä': 'a', // replaces all 'ä' to 'a'\n    'ó': 'o',\n    '[ûúù]': 'u' // replaces multiple\n});\n```\n\u003ca name=\"index.addmatcher\"\u003e\u003c/a\u003e\nAdd private matchers for a specific instance:\n```js\nindex.addMatcher({\n\n    'ä': 'a', // replaces all 'ä' to 'a'\n    'ó': 'o',\n    '[ûúù]': 'u' // replaces multiple\n});\n```\n\n#### Add custom encoder\n\nDefine a private custom encoder during creation/initialization:\n```js\nvar index = new BulkSearch({\n\n    encode: function(str){\n    \n        // do something with str ...\n        \n        return str;\n    }\n});\n```\n\u003ca name=\"bulksearch.register\"\u003e\u003c/a\u003e\n##### Register a global encoder to be used by all instances\n\n\u003e BulkSearch.__register(name, encoder)__\n\n```js\nBulkSearch.register('whitespace', function(str){\n\n    return str.replace(/ /g, '');\n});\n```\n\nUse global encoders:\n```js\nvar index = new BulkSearch({ encode: 'whitespace' });\n```\n\u003ca name=\"index.encode\"\u003e\u003c/a\u003e\n##### Call encoders directly\n\nPrivate encoder:\n```js\nvar encoded = index.encode(\"sample text\");\n```\n\u003ca name=\"bulksearch.encode\"\u003e\u003c/a\u003e\nGlobal encoder:\n```js\nvar encoded = BulkSearch.encode(\"whitespace\", \"sample text\");\n```\n\n##### Mixup/Extend multiple encoders\n\n```js\nBulkSearch.register('mixed', function(str){\n  \n    str = this.encode(\"icase\", str);  // built-in\n    str = this.encode(\"whitespace\", str); // custom\n    \n    return str;\n});\n```\n```js\nBulkSearch.register('extended', function(str){\n  \n    str = this.encode(\"custom\", str);\n    \n    // do something additional with str ...\n\n    return str;\n});\n```\n\n\u003ca name=\"index.info\"\u003e\u003c/a\u003e\n#### Get info\n\n```js\nindex.info();\n```\n\nReturns information about the index, e.g.:\n\n```json\n{\n    \"bytes\": 103600,\n    \"chunks\": 9,\n    \"fragmentation\": 0,\n    \"fragments\": 0,\n    \"id\": 0,\n    \"length\": 7798,\n    \"matchers\": 0,\n    \"size\": 10000,\n    \"status\": false\n}\n```\n\n__Note:__ When the fragmentation value is about 50% or higher, your should consider using _cleanup()_.\n\u003ca name=\"index.optimize\"\u003e\u003c/a\u003e\n#### Optimize / Cleanup index\n\nOptimize an index will free all fragmented memory and also rebuilds the index by scoring.\n\n```js\nindex.optimize();\n```\n\u003ca name=\"pagination\"\u003e\u003c/a\u003e\n### Pagination\n\n__Note:__ Pagination can simply reduce query time by a factor of 100.\n\nEnable pagination on initialization:\n\n```js\nvar index = BulkSearch.create({ paging: true });\n```\n\nPerform query and pass a limit (items per page):\n\n```js\nindex.search(\"John\", 10);\n```\n\nThe response will include a pagination object like this:\n\n```json\n{\n    \"current\": \"0:0\",\n    \"prev\": null,\n    \"next\": \"1:16322\",\n    \"results\": []\n}\n```\n\nExplanation:\n\n\u003ctable\u003e\n    \u003ctr\u003e\n        \u003ctd align=\"left\"\u003e\"current\"\u003c/th\u003e\n        \u003ctd align=\"left\"\u003eIncludes the pointer to the current page.\u003c/th\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\u003c/tr\u003e\n    \u003ctr\u003e\n        \u003ctd align=\"left\"\u003e\"prev\"\u003c/th\u003e\n        \u003ctd align=\"left\"\u003eIncludes the pointer to the previous page. Whenever this field has the value \u003ci\u003enull\u003c/i\u003e there are no more previous pages available.\u003c/th\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\u003c/tr\u003e\n    \u003ctr\u003e\n        \u003ctd align=\"left\"\u003e\"next\"\u003c/th\u003e\n        \u003ctd align=\"left\"\u003eIncludes the pointer to the next page. Whenever this field has the value \u003ci\u003enull\u003c/i\u003e there are no more pages left.\u003c/th\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\u003c/tr\u003e\n    \u003ctr\u003e\n        \u003ctd align=\"left\"\u003e\"results\"\u003c/th\u003e\n        \u003ctd align=\"left\"\u003eArray of matched items.\u003c/th\u003e\n    \u003c/tr\u003e\n\u003c/table\u003e\n\u003ca name=\"index.search2\"\u003e\u003c/a\u003e\n\nPerform query and pass a pointer to a specific page:\n\n```js\nindex.search(\"John\", {\n    \n    page: \"1:16322\", // pointer\n    limit: 10\n});\n```\n\n\u003ca name=\"options\" id=\"options\"\u003e\u003c/a\u003e\n## Options\n\n\u003ctable\u003e\n    \u003ctr\u003e\n        \u003cth align=\"left\"\u003eOption\u003c/th\u003e\n        \u003cth align=\"left\"\u003eValues\u003c/th\u003e\n        \u003cth align=\"left\"\u003eDescription\u003c/th\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\u003c/tr\u003e\n    \u003ctr\u003e\n        \u003ctd align=\"top\"\u003etype\u003c/td\u003e\n        \u003ctd vertical=\"top\" vertical-align=\"top\"\u003e\n            \"byte\"\u003cbr\u003e\n            \"short\"\u003cbr\u003e\n            \"integer\"\u003cbr\u003e\n            \"float\"\u003cbr\u003e\n            \"string\"\n        \u003c/td\u003e\n        \u003ctd vertical-align=\"top\"\u003eThe data type of passed IDs has to be specified on creation. It is recommended to uses to most lowest possible data range here, e.g. use \"short\" when IDs are not higher than 65,535.\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\u003c/tr\u003e\n    \u003ctr\u003e\n        \u003ctd align=\"top\"\u003eencode\u003c/td\u003e\n        \u003ctd\u003e\n            false\u003cbr\u003e\n            \"icase\"\u003cbr\u003e\n            \"simple\"\u003cbr\u003e\n            \"advanced\"\u003cbr\u003e\n            \"extra\"\u003cbr\u003e\n            function(string):string\n        \u003c/td\u003e\n        \u003ctd\u003eThe encoding type. Choose one of the built-ins or pass a custom encoding function.\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\u003c/tr\u003e\n    \u003ctr\u003e\n        \u003ctd align=\"top\"\u003eboolean\u003c/td\u003e\n        \u003ctd\u003e\n            \"and\"\u003cbr\u003e\n            \"or\"\n        \u003c/td\u003e\n        \u003ctd\u003eThe applied boolean model when comparing multiple words. \u003cb\u003eNote:\u003c/b\u003e When using \"or\" the first word is also compared with \"and\". Example: a query with 3 words, results has either: matched word 1 \u0026 2 and matched word 1 \u0026 3.\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\u003c/tr\u003e\n    \u003ctr\u003e\n        \u003ctd align=\"top\"\u003esize\u003c/td\u003e\n        \u003ctd\u003e2500 - 10000\u003c/td\u003e\n        \u003ctd\u003eThe size of chunks. It depends on content length which value fits best. Short content length (e.g. User names) are faster with a chunk size of 2,500. Bigger text runs faster with a chunk size of 10,000. \u003cb\u003eNote:\u003c/b\u003e It is recommended to use a minimum chunk size of the maximum content length which has to be indexed to prevent fragmentation.\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003c!--\n    \u003ctr\u003e\u003c/tr\u003e\n    \u003ctr\u003e\n        \u003ctd align=\"top\"\u003edepth\u003c/td\u003e\n        \u003ctd\u003e0 - 6\u003c/td\u003e\n        \u003ctd\u003eSet the depth of register. It is recommended to use a value in relation to the number of stored index and content length for an optimum performance-memory value. \u003cb\u003eNote:\u003c/b\u003e Increase this options carefully!\u003c/td\u003e\n    \u003c/tr\u003e\n    --\u003e\n    \u003ctr\u003e\u003c/tr\u003e\n    \u003ctr\u003e\n        \u003ctd align=\"top\"\u003emulti\u003c/td\u003e\n        \u003ctd\u003e\n            true\u003cbr\u003e\n            false\n        \u003c/td\u003e\n        \u003ctd\u003eEnable multi word processing.\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\u003c/tr\u003e\n    \u003ctr\u003e\n        \u003ctd align=\"top\"\u003eordered\u003c/td\u003e\n        \u003ctd\u003e\n            true\u003cbr\u003e\n            false\n        \u003c/td\u003e\n        \u003ctd\u003eMultiple words has to be the same order as the matched entry.\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\u003c/tr\u003e\n    \u003ctr\u003e\n        \u003ctd align=\"top\"\u003estrict\u003c/td\u003e\n        \u003ctd\u003e\n            true\u003cbr\u003e\n            false\n        \u003c/td\u003e\n        \u003ctd\u003eMatches exactly needs to be started with the query.\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\u003c/tr\u003e\n    \u003ctr\u003e\n        \u003ctd align=\"top\"\u003ecache\u003c/td\u003e\n        \u003ctd\u003e\n            true\u003cbr\u003e\n            false\n        \u003c/td\u003e\n        \u003ctd\u003eEnable caching.\u003c/td\u003e\n    \u003c/tr\u003e\n\u003c/table\u003e\n\n\u003ca name=\"phonetic\" id=\"phonetic\"\u003e\u003c/a\u003e\n## Phonetic Encoding\n\n\u003ctable\u003e\n    \u003ctr\u003e\n        \u003cth align=\"left\"\u003eEncoder\u003c/th\u003e\n        \u003cth align=\"left\"\u003eDescription\u003c/th\u003e\n        \u003cth align=\"left\"\u003eFalse Positives\u003c/th\u003e\n        \u003cth align=\"left\"\u003eCompression Level\u003c/th\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\u003c/tr\u003e\n    \u003ctr\u003e\n        \u003ctd\u003e\u003cb\u003efalse\u003c/b\u003e\u003c/td\u003e\n        \u003ctd\u003eTurn off encoding\u003c/td\u003e\n        \u003ctd\u003eno\u003c/td\u003e\n        \u003ctd\u003eno\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\u003c/tr\u003e\n    \u003ctr\u003e\n        \u003ctd\u003e\u003cb\u003e\"icase\"\u003c/b\u003e\u003c/td\u003e\n        \u003ctd\u003eCase in-sensitive encoding\u003c/td\u003e\n        \u003ctd\u003eno\u003c/td\u003e\n        \u003ctd\u003eno\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\u003c/tr\u003e\n    \u003ctr\u003e\n        \u003ctd\u003e\u003cb\u003e\"simple\"\u003c/b\u003e\u003c/td\u003e\n        \u003ctd\u003ePhonetic normalizations\u003c/td\u003e\n        \u003ctd\u003eno\u003c/td\u003e\n        \u003ctd\u003e~ 3%\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\u003c/tr\u003e\n    \u003ctr\u003e\n        \u003ctd\u003e\u003cb\u003e\"advanced\"\u003c/b\u003e\u003c/td\u003e\n        \u003ctd\u003ePhonetic normalizations + Literal transformations\u003c/td\u003e\n        \u003ctd\u003eno\u003c/td\u003e\n        \u003ctd\u003e~ 25%\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\u003c/tr\u003e\n    \u003ctr\u003e\n        \u003ctd\u003e\u003cb\u003e\"extra\"\u003c/b\u003e\u003c/td\u003e\n        \u003ctd\u003ePhonetic normalizations + Soundex transformations\u003c/td\u003e\n        \u003ctd\u003eyes\u003c/td\u003e\n        \u003ctd\u003e~ 50%\u003c/td\u003e\n    \u003c/tr\u003e\n\u003c/table\u003e\n\n\u003ca name=\"compare\" id=\"compare\"\u003e\u003c/a\u003e\n### Compare Phonetic Search\n\nReference String: __\"Björn-Phillipp Mayer\"__\n\n\u003ctable\u003e\n    \u003ctr\u003e\n        \u003cth align=\"left\"\u003eQuery\u003c/th\u003e\n        \u003cth align=\"left\"\u003eElasticSearch\u003c/th\u003e\n        \u003cth align=\"left\"\u003eBulkSearch (iCase)\u003c/th\u003e\n        \u003cth align=\"left\"\u003eBulkSearch (Simple)\u003c/th\u003e\n        \u003cth align=\"left\"\u003eBulkSearch (Adv.)\u003c/th\u003e\n        \u003cth align=\"left\"\u003eBulkSearch (Extra)\u003c/th\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\u003c/tr\u003e\n    \u003ctr\u003e\n        \u003ctd\u003ebjörn\u003c/td\u003e\n        \u003ctd\u003e\u003cb\u003eyes\u003c/b\u003e\u003c/td\u003e\n        \u003ctd\u003e\u003cb\u003eyes\u003c/b\u003e\u003c/td\u003e\n        \u003ctd\u003e\u003cb\u003eyes\u003c/b\u003e\u003c/td\u003e\n        \u003ctd\u003e\u003cb\u003eyes\u003c/b\u003e\u003c/td\u003e\n        \u003ctd\u003e\u003cb\u003eyes\u003c/b\u003e\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\u003c/tr\u003e\n    \u003ctr\u003e\n        \u003ctd\u003ebjör\u003c/td\u003e\n        \u003ctd\u003eno\u003c/td\u003e\n        \u003ctd\u003e\u003cb\u003eyes\u003c/b\u003e\u003c/td\u003e\n        \u003ctd\u003e\u003cb\u003eyes\u003c/b\u003e\u003c/td\u003e\n        \u003ctd\u003e\u003cb\u003eyes\u003c/b\u003e\u003c/td\u003e\n        \u003ctd\u003e\u003cb\u003eyes\u003c/b\u003e\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\u003c/tr\u003e\n    \u003ctr\u003e\n        \u003ctd\u003ebjorn\u003c/td\u003e\n        \u003ctd\u003eno\u003c/td\u003e\n        \u003ctd\u003eno\u003c/td\u003e\n        \u003ctd\u003e\u003cb\u003eyes\u003c/b\u003e\u003c/td\u003e\n        \u003ctd\u003e\u003cb\u003eyes\u003c/b\u003e\u003c/td\u003e\n        \u003ctd\u003e\u003cb\u003eyes\u003c/b\u003e\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\u003c/tr\u003e\n    \u003ctr\u003e\n        \u003ctd\u003ebjoern\u003c/td\u003e\n        \u003ctd\u003eno\u003c/td\u003e\n        \u003ctd\u003eno\u003c/td\u003e\n        \u003ctd\u003eno\u003c/td\u003e\n        \u003ctd\u003e\u003cb\u003eyes\u003c/b\u003e\u003c/td\u003e\n        \u003ctd\u003e\u003cb\u003eyes\u003c/b\u003e\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\u003c/tr\u003e\n    \u003ctr\u003e\n        \u003ctd\u003ephilipp\u003c/td\u003e\n        \u003ctd\u003eno\u003c/td\u003e\n        \u003ctd\u003eno\u003c/td\u003e\n        \u003ctd\u003eno\u003c/td\u003e\n        \u003ctd\u003e\u003cb\u003eyes\u003c/b\u003e\u003c/td\u003e\n        \u003ctd\u003e\u003cb\u003eyes\u003c/b\u003e\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\u003c/tr\u003e\n    \u003ctr\u003e\n        \u003ctd\u003efilip\u003c/td\u003e\n        \u003ctd\u003eno\u003c/td\u003e\n        \u003ctd\u003eno\u003c/td\u003e\n        \u003ctd\u003eno\u003c/td\u003e\n        \u003ctd\u003e\u003cb\u003eyes\u003c/b\u003e\u003c/td\u003e\n        \u003ctd\u003e\u003cb\u003eyes\u003c/b\u003e\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\u003c/tr\u003e\n    \u003ctr\u003e\n        \u003ctd\u003ebjörnphillip\u003c/td\u003e\n        \u003ctd\u003eno\u003c/td\u003e\n        \u003ctd\u003eno\u003c/td\u003e\n        \u003ctd\u003e\u003cb\u003eyes\u003c/b\u003e\u003c/td\u003e\n        \u003ctd\u003e\u003cb\u003eyes\u003c/b\u003e\u003c/td\u003e\n        \u003ctd\u003e\u003cb\u003eyes\u003c/b\u003e\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\u003c/tr\u003e\n    \u003ctr\u003e\n        \u003ctd\u003emeier\u003c/td\u003e\n        \u003ctd\u003eno\u003c/td\u003e\n        \u003ctd\u003eno\u003c/td\u003e\n        \u003ctd\u003eno\u003c/td\u003e\n        \u003ctd\u003e\u003cb\u003eyes\u003c/b\u003e\u003c/td\u003e\n        \u003ctd\u003e\u003cb\u003eyes\u003c/b\u003e\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\u003c/tr\u003e\n    \u003ctr\u003e\n        \u003ctd\u003ebjörn meier\u003c/td\u003e\n        \u003ctd\u003eno\u003c/td\u003e\n        \u003ctd\u003eno\u003c/td\u003e\n        \u003ctd\u003eno\u003c/td\u003e\n        \u003ctd\u003e\u003cb\u003eyes\u003c/b\u003e\u003c/td\u003e\n        \u003ctd\u003e\u003cb\u003eyes\u003c/b\u003e\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\u003c/tr\u003e\n    \u003ctr\u003e\n        \u003ctd\u003emeier fhilip\u003c/td\u003e\n        \u003ctd\u003eno\u003c/td\u003e\n        \u003ctd\u003eno\u003c/td\u003e\n        \u003ctd\u003eno\u003c/td\u003e\n        \u003ctd\u003e\u003cb\u003eyes\u003c/b\u003e\u003c/td\u003e\n        \u003ctd\u003e\u003cb\u003eyes\u003c/b\u003e\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\u003c/tr\u003e\n    \u003ctr\u003e\n        \u003ctd\u003ebyorn mair\u003c/td\u003e\n        \u003ctd\u003eno\u003c/td\u003e\n        \u003ctd\u003eno\u003c/td\u003e\n        \u003ctd\u003eno\u003c/td\u003e\n        \u003ctd\u003eno\u003c/td\u003e\n        \u003ctd\u003e\u003cb\u003eyes\u003c/b\u003e\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n        \u003ctd\u003e\u003ci\u003e(false positives)\u003c/i\u003e\u003c/td\u003e\n        \u003ctd\u003eyes\u003c/td\u003e\n        \u003ctd\u003e\u003cb\u003eno\u003c/b\u003e\u003c/td\u003e\n        \u003ctd\u003e\u003cb\u003eno\u003c/b\u003e\u003c/td\u003e\n        \u003ctd\u003e\u003cb\u003eno\u003c/b\u003e\u003c/td\u003e\n        \u003ctd\u003eyes\u003c/td\u003e\n    \u003c/tr\u003e\n\u003c/table\u003e\n\n\u003ca name=\"memory\" id=\"memory\"\u003e\u003c/a\u003e\n## Memory Usage\n\n__Note:__ The data type of passed IDs has to be specified on creation. It is recommended to uses the most lowest possible data range here, e.g. use \"short\" when IDs are not higher than 65,535. \n\n\u003ctable\u003e\n    \u003ctr\u003e\n        \u003cth align=\"left\"\u003eID Type\u003c/th\u003e\n        \u003cth align=\"left\"\u003eRange of Values\u003c/th\u003e\n        \u003cth align=\"left\"\u003eMemory usage of every ~ 100,000 indexed words\u003c/th\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\u003c/tr\u003e\n    \u003ctr\u003e\n        \u003ctd\u003eByte\u003c/td\u003e\n        \u003ctd\u003e0 - 255\u003c/td\u003e\n        \u003ctd\u003e4.5 Mb\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\u003c/tr\u003e\n    \u003ctr\u003e\n        \u003ctd\u003eShort\u003c/td\u003e\n        \u003ctd\u003e0 - 65,535\u003c/td\u003e\n        \u003ctd\u003e5.3 Mb\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\u003c/tr\u003e\n    \u003ctr\u003e\n        \u003ctd\u003eInteger\u003c/td\u003e\n        \u003ctd\u003e0 - 4,294,967,295\u003c/td\u003e\n        \u003ctd\u003e6.8 Mb\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\u003c/tr\u003e\n    \u003ctr\u003e\n        \u003ctd\u003eFloat\u003c/td\u003e\n        \u003ctd\u003e0 - * (16 digits)\u003c/td\u003e\n        \u003ctd\u003e10 Mb\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\u003c/tr\u003e\n    \u003ctr\u003e\n        \u003ctd\u003eString\u003c/td\u003e\n        \u003ctd\u003e* (unlimited)\u003c/td\u003e\n        \u003ctd\u003e28.2 Mb\u003c/td\u003e\n    \u003c/tr\u003e\n\u003c/table\u003e\n\n---\n\nAuthor BulkSearch: Thomas Wilkerling\u003cbr\u003e\nLicense: \u003ca href=\"http://www.apache.org/licenses/LICENSE-2.0.html\" target=\"_blank\"\u003eApache 2.0 License\u003c/a\u003e\u003cbr\u003e\n","funding_links":[],"categories":["HTML"],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnextapps-de%2Fbulksearch","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fnextapps-de%2Fbulksearch","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnextapps-de%2Fbulksearch/lists"}