
Research
Security News
Malicious PyPI Package Exploits Deezer API for Coordinated Music Piracy
Socket researchers uncovered a malicious PyPI package exploiting Deezer’s API to enable coordinated music piracy through API abuse and C2 server control.
addsearch-js-client
Advanced tools
AddSearch is a Search-as-a-Service for all your search needs. This API Client lets you easily use the Search API and Indexing API with JavaScript.
The library is available on the global CDN jsDelivr:
<script src="https://cdn.jsdelivr.net/npm/addsearch-js-client@0.5/dist/addsearch-js-client.min.js"></script>
Or install the library locally to use it with Node.js:
npm install addsearch-js-client --save
After installation, add the library to your JS code
var AddSearchClient = require('addsearch-js-client');
Or use import in ES6
import AddSearchClient from 'addsearch-js-client';
// Create client with your 32-character SITEKEY
var client = new AddSearchClient('YOUR PUBLIC SITEKEY');
// Callback function
var cb = function(res) {
// Print results to console
console.log(res);
}
// Execute search. Callback function will be called with search results
client.search('keyword', cb);
The client provides following functions to execute search queries. To use the client library for indexing, see Indexing API.
// Search with a specific keyword
client.search('keyword', callback);
// Search with the previously used keyword or execute a "match all" query
client.search(callback);
// Search with the previously used keyword and callback (e.g. after modifying filters)
client.search();
Search suggestions are keywords and search phrases that real users have used in your search. Configure Search suggestions on AddSearch Dashboard before using this function.
// Get suggestions starting with a specific prefix
client.suggestions('a', callback);
// Number of search suggestions to fetch (default 10)
client.setSuggestionsSize(20);
Custom fields autocomplete can be used for predictive search. For example, product names or categories can be suggested as the keyword is being typed in.
// Fetch custom field values starting with a specific prefix In this example, fetch records
// starting with *a* from the *custom_fields.brand* field. Results could be "adidas, apple, azure"
client.autocomplete('custom_fields.brand', 'a', callback);
// Number of autocompletion results to fetch (default 10)
client.setAutocompleteSize(20);
Fuzzy matching is used for typo tolerance. There are four options:
// Control fuzzy matching used for typo-tolerance
// Possible values true/false/"auto"/"retry" (default: "auto")
client.setFuzzyMatch(false);
Enable or disable postfix wildcard. I.e. should keyword "add" match to "addsearch" or should it just match to the term add
// Possible values true/false (default: true)
client.setPostfixWildcard(false);
Set page number, page size and sorting parameters. It's possible to order results by:
// Defaults: page "1", pageSize "10", sortBy "relevance", sortOrder "desc"
client.setPaging(page, pageSize, sortBy, sortOrder);
Other functions.
// Next page (call search function to fetch results)
client.nextPage();
// Previous page
client.previousPage();
// Fetch documents in specific language (e.g. "en" or "de")
client.setLanguage('en');
// Documents published between specific date range
client.setDateFilter('2019-01-01', '2019-01-31');
// Products in specific price range (in cents. e.g. 100,00 - 200,00)
client.setPriceRangeFilter('10000', '20000');
Filter by URL patterns, document types or addsearch-category meta tag values. See the full documentation.
// Only PDF files or products
client.setCategoryFilters('doctype_pdf,products');
Filter by custom fields. Custon fields can be defined in meta tags or AddSearch crawler can pick them up from your HTML or JSON data. See the full documentation.
// Search by specific city (Berlin, Paris or Boston)
client.addCustomFieldFilter('city','berlin');
client.addCustomFieldFilter('city','paris');
client.addCustomFieldFilter('city','boston');
// Remove Paris (Berlin and Boston remaining)
client.removeCustomFieldFilter('city','paris');
// Remove all cities
client.removeCustomFieldFilter('city');
Set complex filtering object that can contain nested and, or, not, and range filters.
// Find results where brand is apple, color is not white, and price is between 200 and 500
var filter = {
'and':[
{'custom_fields.brand': 'apple'},
{'not': {'custom_fields.color': 'white'}},
{'range': {'custom_fields.price': {'gt': 200, 'lt':500}}}
]
};
client.setFilterObject(filter);
// By default, fetch all search results
// If "organic", Pinned results and Promotions are left out
client.setResultType('organic');
// Declare fields for faceting. Number of hits found from
// these fields will be returned
client.addFacetField('category');
client.addFacetField('custom_fields.genre');
By default, 10 facets with most hits are returned per field. Use the following function to get more or less facets.
client.setNumberOfFacets(20);
Group numerical custom fields into range buckets.
// Define ranges. E.g. products with price $0-$100, $100-$200, and over $200.
// From value is inclusive, to value is exclusive
var ranges = [
{'to': 100},
{'from': 100, 'to': 200},
{'from': 200}
];
// Parameters: field name, range array
client.addRangeFacet('custom_fields.price', ranges);
Get minimum, maximum, and average values of a numerical or date-based custom field. The information is handy for applications like range filtering.
// Search response will have a fieldStats element with information like
// custom_fields.price: {min: 1230, max: 1590, avg: 1382}
client.addStatsField('custom_fields.price');
When search is executed, send the event to your AddSearch Analytics Dashboard.
// If the numberOfResults is 0, the search is shown in the list of "queries with no hits"
client.sendStatsEvent('search', keyword, {numberOfResults: n});
When a search results is clicked, send the event to your AddSearch Analytics Dashboard. Click information is shown in your statistics and used by the self-learning search algorithm.
// documentId is the 32-character long id that is part of each hit in search results.
// position is the position of the document that was clicked, the first result being 1
client.sendStatsEvent('click', keyword, {documentId: id, position: n});
Control the search session ID manually. Search queries with the same ID are grouped on the Analytics Dashboard. For example, in a search-as-you-type implementation the final keyword of a given session is shown.
client.getStatsSessionId();
client.setStatsSessionId(id);
Send search events automatically to the Analytics Dashboard. Not recommended in search-as-you-type implementations, as every keystroke would fire a statistics event
// Control whether search queries are sent to your AddSearch Analytics Dashboard automatically or not (default: true)
client.setCollectAnalytics(false);
// Add a user token to the search request (if personalization in use)
client.setUserToken('uuid');
In personalized search, user events are typically sent to AddSearch via API and a user token is passed with the search query (see setUserToken function). An alternative way is to send user events needed for personalization with the search query.
// Events depend on the personalization strategy
// Contact AddSearch for more information
var events = [
{favorite_genre: 'rock'},
{favorite_band: 'Red Hot Chili Peppers'},
{least_favorite_genre: 'country'}
];
client.setPersonalizationEvents(events);
// Add JWT to the search request (if protected search index)
client.setJWT(token);
// Set Search API throttle time in milliseconds. Default is 200.
client.setThrottleTime(500);
// Set API hostname (e.g. for dedicated environments)
client.setApiHostname('api.addsearch.com');
With the Indexing API, you can fetch, create, update, and delete single documents or batches of documents.
Indexing API functions are meant to be used with Node.js. Never expose secret key in your website code.
// Create client with your keys
var client = new AddSearchClient('YOUR PUBLIC SITEKEY', 'YOUR SECRET KEY');
The secret key can be found from AddSearch Dashboard's "Setup" > "Keys and installation" page. Always keep the key secret.
All Indexing API functions are Promise-based.
Documents can contain a set of pre-defined fields, as well as any number of custom fields defined under the custom_fields key.
Using pre-defined fields is optional, but default Search UI components display them by default, so pre-defined field give you visible results a bit faster.
Pre-defined fields are: url, title, and main_content.
Example document:
const doc = {
id: '1234',
url: 'https://www.example-store.com/product-x',
title: 'Example product',
main_content: 'Lorem ipsum',
custom_fields: {
'name': 'Example product',
'description': 'Description for the example product',
'price_cents': 599,
'average_customer_rating': 4.5,
'release_date': 1589200255
}
}
Data types for custom fields are automatically detected from the content. Supported data types are:
Dates should be defined as UNIX timestamps with integer values.
If the id is not defined in the document at indexing time, it is generated automatically either randomly or from the url field.
// ID defined by the user
const docWithDefinedId = {
id: '1234',
custom_fields: {}
}
// ID created from the URL field (md5 of the url)
const docWithURL= {
url: 'https://..',
custom_fields: {}
}
// ID generated randomly
const docWithAutogeneratedId = {
// No id or url fields
custom_fields: {}
}
Add a document to the index, or update a document.
const doc = {
id: '1234',
custom_fields: {
'name': 'Example product'
}
};
// Save document
client.saveDocument(doc)
.then(response => {
console.log(response);
})
.catch(error => {
console.log(error);
});
Fetch a specific document by ID.
client.getDocument(id)
.then(response => {
console.log(response);
})
.catch(error => {
console.log(error);
});
Delete a specific document by ID.
client.deleteDocument(id)
.then(response => {
console.log(response);
})
.catch(error => {
console.log(error);
});
Add or update bunch of documents defined in an array.
const batch = {
documents: [
{
id: '1234',
custom_fields: {
'name': 'Product 1'
}
},
{
id: '5678',
custom_fields: {
'name': 'Product 2'
}
}
]
};
// Save batch of documents
client.saveDocumentsBatch(batch)
.then(response => {
console.log(response);
})
.catch(error => {
console.log(error);
});
Delete multiple documents with an array of document IDs.
// Array of document IDs
const batch = {
documents: ["1234", "5678"]
};
// Delete batch of documents
client.deleteDocumentsBatch(batch)
.then(response => {
console.log(response);
})
.catch(error => {
console.log(error);
});
The client is tested on
To modify this client library, clone this repository to your computer and execute following commands.
npm install
Re-compile automatically when source files are changed
npm run watch
npm test
npm run build
Built bundle is saved under the dist/ folder
Feel free to send any questions, ideas, and suggestions at support@addsearch.com or visit addsearch.com for more information.
FAQs
AddSearch API JavaScript client
The npm package addsearch-js-client receives a total of 1,674 weekly downloads. As such, addsearch-js-client popularity was classified as popular.
We found that addsearch-js-client demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 0 open source maintainers collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Research
Security News
Socket researchers uncovered a malicious PyPI package exploiting Deezer’s API to enable coordinated music piracy through API abuse and C2 server control.
Research
The Socket Research Team discovered a malicious npm package, '@ton-wallet/create', stealing cryptocurrency wallet keys from developers and users in the TON ecosystem.
Security News
Newly introduced telemetry in devenv 1.4 sparked a backlash over privacy concerns, leading to the removal of its AI-powered feature after strong community pushback.