mirror of https://github.com/lukechilds/docs.git
3 changed files with 6 additions and 199 deletions
@ -1,196 +0,0 @@ |
|||||
--- |
|
||||
description: Blockstack naming service (BNS) |
|
||||
--- |
|
||||
|
|
||||
## Introduction |
|
||||
|
|
||||
The search subsystem for Stacks Blockchain creates an index for data associated |
|
||||
with registered names in namespaces and makes that data searchable. |
|
||||
|
|
||||
The search subsystem is currently meant to index the .id namespace but can |
|
||||
be easily expanded to include other namespaces. |
|
||||
|
|
||||
Currently there are two types of indexes to handle search queries: |
|
||||
|
|
||||
- Substring search on usernames, full names, twitter_handle (powered by MongoDB) |
|
||||
- Raw Lucene index which handles searching extended data e.g., bio. |
|
||||
|
|
||||
Search will currently return upto a max of 20 results (can be less depending on the query) |
|
||||
with data that follows structure of [blockstack IDs](https://github.com/blockstack/blockstack): |
|
||||
|
|
||||
In early 2017, the search subsystem was ported over to the new API system, where support for search is provided by the endpoint: |
|
||||
|
|
||||
``` |
|
||||
http://localhost:5000/search?query=<SEARCH_PATTERN> |
|
||||
``` |
|
||||
|
|
||||
This document describes how to setup the search subsystem to respond at that endpoint. |
|
||||
|
|
||||
## Installation |
|
||||
|
|
||||
- **Step 1:** First, make sure you have [virtualenv installed](http://docs.python-guide.org/en/latest/dev/virtualenvs/). |
|
||||
Then, setup the API and search subsystem: |
|
||||
|
|
||||
```bash |
|
||||
$ sudo apt-get install -y mongodb memcached python-dev libmemcached-dev zlib1g-dev nginx |
|
||||
$ sudo pip install uwsgi |
|
||||
$ git clone https://github.com/blockstack/blockstack-core.git --branch api |
|
||||
$ cd blockstack-core/ |
|
||||
$ sudo pip install . |
|
||||
$ sudo pip install -r api/requirements.txt |
|
||||
$ sudo mkdir /var/blockstack-search && sudo chown $USER:$USER /var/blockstack-search |
|
||||
``` |
|
||||
|
|
||||
- **Step 2:** Make sure you have a Stacks Node running locally (see [instructions](https://github.com/blockstack/blockstack-core/blob/master/README.md#quick-start)). We highly |
|
||||
recommend using a local node because the search subsystem issues thousands of calls to |
|
||||
a Stacks Node for re-indexing and remote nodes can slow down performance. |
|
||||
|
|
||||
- **Step 3:** Fetch the data for the .id namespace and respective profiles. Note, you may want to redirect stderr to a file, as there is a lot of debug output. |
|
||||
|
|
||||
```bash |
|
||||
$ cd api/ |
|
||||
|
|
||||
$ python -m search.fetch_data --fetch_namespace |
|
||||
|
|
||||
$ python -m search.fetch_data --fetch_profiles |
|
||||
``` |
|
||||
|
|
||||
- **Step 4:** Create the search index: |
|
||||
|
|
||||
```bash |
|
||||
python -m search.basic_index --refresh |
|
||||
``` |
|
||||
|
|
||||
- **Step 5:** Enable search API endpoint: |
|
||||
|
|
||||
```bash |
|
||||
$ sed -i 's/SEARCH_API_ENDPOINT_ENABLED \= False/SEARCH_API_ENDPOINT_ENABLED \= True/' config.py |
|
||||
``` |
|
||||
|
|
||||
## Usage |
|
||||
|
|
||||
You can quickly test the search index from the command line: |
|
||||
|
|
||||
```bash |
|
||||
python -m search.substring_search --search_name "Fred Wil" |
|
||||
python -m search.substring_search --search_twitter fredwil |
|
||||
``` |
|
||||
|
|
||||
You can also use the search API end-point: |
|
||||
|
|
||||
```bash |
|
||||
curl -G {machine_ip}:port/search/name -d "query=muneeb" |
|
||||
``` |
|
||||
|
|
||||
Sample Response: |
|
||||
|
|
||||
```json |
|
||||
{ |
|
||||
"people": [ |
|
||||
{ |
|
||||
"profile": { |
|
||||
"website": [ |
|
||||
{ |
|
||||
"url": "http://muneebali.com", |
|
||||
"@type": "WebSite" |
|
||||
} |
|
||||
], |
|
||||
"name": "Muneeb Ali", |
|
||||
"address": { |
|
||||
"addressLocality": "New York, NY", |
|
||||
"@type": "PostalAddress" |
|
||||
}, |
|
||||
"image": [ |
|
||||
{ |
|
||||
"contentUrl": "https://s3.amazonaws.com/dx3/muneeb", |
|
||||
"@type": "ImageObject", |
|
||||
"name": "cover" |
|
||||
}, |
|
||||
{ |
|
||||
"contentUrl": "https://s3.amazonaws.com/kd4/muneeb", |
|
||||
"@type": "ImageObject", |
|
||||
"name": "avatar" |
|
||||
} |
|
||||
], |
|
||||
"@type": "Person", |
|
||||
"description": "Co-founder of Blockstack. Interested in distributed systems and blockchains. Previously, PhD at Princeton." |
|
||||
}, |
|
||||
"username": "muneeb" |
|
||||
}, |
|
||||
{ |
|
||||
"profile": { |
|
||||
"message": "This blockchain ID is reserved for Muneeb Ali. If this is you, please email support@onename.com to claim it for free.", |
|
||||
"status": "reserved" |
|
||||
}, |
|
||||
"username": "muneebali" |
|
||||
}, |
|
||||
{ |
|
||||
"profile": { |
|
||||
"cover": { |
|
||||
"url": "https://s3.amazonaws.com/97p/HHE.jpg" |
|
||||
}, |
|
||||
"v": "0.2" |
|
||||
}, |
|
||||
"username": "muneebali1" |
|
||||
} |
|
||||
] |
|
||||
} |
|
||||
``` |
|
||||
|
|
||||
## Enabling Elastic Search |
|
||||
|
|
||||
### Requirements: |
|
||||
|
|
||||
```bash |
|
||||
sudo apt-get install mongodb |
|
||||
sudo apt-get install memcached libmemcached-dev |
|
||||
sudo apt-get install python2.7-dev |
|
||||
pip install -r requirements.txt |
|
||||
``` |
|
||||
|
|
||||
### Elastic Search |
|
||||
|
|
||||
Elastic Search library is not in github and resides at unix/lib/elastic |
|
||||
|
|
||||
the current version we're using is _0.90.2_. Download from: |
|
||||
|
|
||||
```bash |
|
||||
wget https://download.elasticsearch.org/elasticsearch/elasticsearch/elasticsearch-0.90.2.zip |
|
||||
``` |
|
||||
|
|
||||
before installing pylimbmc make sure [memcached](/core/memcached) is installed. |
|
||||
|
|
||||
Ensure that mongodb and elastic search are running |
|
||||
starting elastic search: |
|
||||
|
|
||||
```bash |
|
||||
$elasticsearch (on mac) |
|
||||
bin/elasticsearch -d (on linux) |
|
||||
``` |
|
||||
|
|
||||
To test if elastic search is running: |
|
||||
|
|
||||
```bash |
|
||||
curl -X GET http://localhost:9200/ |
|
||||
``` |
|
||||
|
|
||||
returns: |
|
||||
|
|
||||
```json |
|
||||
{ |
|
||||
"ok": true, |
|
||||
"status": 200, |
|
||||
"name": "Angler", |
|
||||
"version": { |
|
||||
"number": "0.90.2", |
|
||||
"snapshot_build": false, |
|
||||
"lucene_version": "4.3.1" |
|
||||
} |
|
||||
} |
|
||||
``` |
|
||||
|
|
||||
Create Index: |
|
||||
|
|
||||
```bash |
|
||||
python create_search_index.py --create_index |
|
||||
``` |
|
Loading…
Reference in new issue