npmsearch.com
This is the code that powers npmsearch.com, which provides a clean interface to searching pseudo-rated node packages from npm.
api
To query the npmsearch index, you can use the HTTP api which is effectively a proxy to elasticsearch's URI Search.
All requests go through http://npmsearch.com/query. Here's an example:
curl "http://npmsearch.com/query?q=dom&fields=name"
{"results":[{"name":["select-dom"]},{"name":["dom-manipulations"]},{"name":["zero-dom"]},{"name":["dom-stub"]},{"name":["dom-walk"]},{"name":["dom-value"]},{"name":["karma-chai-dom"]},{"name":["dom-select"]},{"name":["dom-listeners"]},{"name":["has-dom"]}],"total":7265,"from":0}
Available fields
- author
- created
- dependencies
- description
- devDependencies
- homepage
- keywords
- maintainers
- modified
- name
- readme
- repository
- scripts
- times
- version
- rating - computed rating as per bin/rating.js
Running your own npmsearch
Setup Elasticsearch
See the elasticsearch docs for setting up a node
# create an index
curl -XPUT http://localhost:9200/my-index-name
# setup the package field mappings
cat mappings.json | curl -v -XPOST http://localhost:9200/my-index-name/package/_mapping -H "Content-type: application/json" -d @-
# setup an alias to 'registry'
curl -XPOST 'http://localhost:9201/_aliases' -d '
{
"actions" : [
{ "add" : { "index" : "my-index-name", "alias" : "registry" } }
]
}'
pipe the npm registry into elasticsearch
npm2es --couch="https://skimdb.npmjs.com/registry" --es="http://localhost:9200/registry"
run the server
node bin/server.js --es="http://localhost:9200/registry"
compute ratings
node bin/rating.js --es="http://localhost:9200/registry"