专否 写文章

jerkzhang,stay hungry, stay foolish

Nov 5, 2018
Follow

使用Elasticsearch做搜索引擎


Elasticsearch是一款开源免费的搜索引擎,你值得拥有。

Java环境安装

新版的elasticsearch(v5.1.2)最少需要java8

sudo add-apt-repository ppa:webupd8team/java -y
sudo apt-get update
sudo apt-get install oracle-java8-installer
sudo apt-get install oracle-java8-set-default

安装好后,检查一下java的版本

java -version

Elasticsearch的安装

官网下载下来解压即可,这家伙是绿色版的。

Elasticsearch的启动

./bin/elasticsearch

如果加 -d 就是后台运行;默认是9200端口。

使用python的requests库发送json(match_all)

#coding=utf-8
import json
import requests

url = 'http://localhost:9200/_count?pretty'
data = {'query': {'match_all': {}}}

r = requests.post(url, data=json.dumps(data)) #要用json.dumps()!!!
print r.text

插入索引

#coding=utf-8
import requests
import json

url = 'http://localhost:9200/zyw/article/1' # zyw是index名,article是类型type
data = {'content': "fuck it" } # uri中的变量自动能导入到_id中

r = requests.put(url, data=json.dumps(data)) # 要用json.dumps()!!!
print r.text

获取索引

#coding=utf-8
import requests
import json

url = 'http://localhost:9200/zyw/article/2?pretty'

r = requests.get(url) # 要用json.dumps()!!!
print r.text

删除整个索引

#coding=utf-8
import requests
import json

# 手动删除索引
url = 'http://10.13.71.182:9200/zyw'

r = requests.delete(url)
print r.text

设置映射与分析器(html_strip)

映射与分析必须是在整个文档索引没有建立前设置好。注意自定义的那个分析器必须用custom类型。

#coding=utf-8
import requests
import json

# 设置分析器
# 必须在索引被创建前来设置映射与分析
url = 'http://10.13.71.182:9200/zyw?pretty'
data = {
    "settings": {
        "analysis": {
            "filter": {
                "my_stopwords": {
                    "type":       "stop",
                    "stopwords": [ "the", "a" ]
            }},
            "analyzer": {
                "my_analyzer": {
                    "type":         "custom",
                    "char_filter":  [ "html_strip" ],
                    "tokenizer":    "standard",
                    "filter":       [ "lowercase", "my_stopwords" ]
            }}
}}}

r = requests.put(url, data=json.dumps(data)) #要用json.dumps()!!!
print r.text

创建好的分析器my_analyzer无法自己使用……必须提前绑定具体的类型(type,但是我看来更像绑定具体的字段)

#coding=utf-8
import requests
import json

url = 'http://10.13.71.182:9200/zyw/_mapping/article'
data = {
    "properties": {
        "content": {
            "type":      "text",
            "analyzer":  "my_analyzer"
        }
    }
}

r = requests.put(url, data=json.dumps(data) )
print r.text

全文搜索

#coding=utf-8
import json
import requests

url = 'http://localhost:9200/zyw/article/_search?size=5&pretty'
data = {'query': {'match': { "content":"XXXX" }}}

r = requests.post(url, data=json.dumps(data)) #要用json.dumps()!!!
print r.text

config设置(绑定某个内网ip)

config参数设置在es的config文件夹下,整个config文件夹就是参数源。

1. 在 /etc/sysctl.conf 设置或添加 vm.max_map_count=262144 然后 sysctl -p

2. /etc/security/limits.conf 中添加如下:

* soft nofile 65536
* hard nofile 131072
* soft nproc 2048
* hard nproc 4096

然后就可以以指定的config来启动了

./bin/elasticsearch -Epath.conf=/data/elasticsearch-5.2.2/config/

es文件夹权限问题

es是绿色版的;假如es的文件夹的权限有问题,这就要把es文件夹以及其子文件夹的权限变成777

找到那个文件夹,然后输入 chmod 777 * -R



很久以前的笔记,好多都记不清了~

喜欢这个文章 | 分享 | 新建跟帖