/npmsearch

blazing fast npm search utility

Primary LanguageJavaScriptMIT LicenseMIT

npmsearch.com

Join the chat at https://gitter.im/solids/npmsearch

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"

License

MIT