elasticsearch是个分布式向量数据库,支持多种查找模式。此外还拥有 Metadata、Filtering、Hybrid Search、Delete、Store Documents、Async等能力。本文仅是记录本地测试途中遇到的问题。
一,环境部署
下载软件
首先去官网,选择适合平台下载
https://www.elastic.co/downloads/elasticsearch
启动配置
解压后找到config目录下的elasticsearch.yml
找到98行将这里改为false,否则我们无法在浏览器中正常访问
然后找到32、37行设置数据和记录的存储位置
找到92行设为false,否则会提示安全错误
设置后保存即可
启动数据库
回到上层,进入bin目录,找到bat可执行文件双击后等待,
随后弹出控制台,若无报错信息便是启动成功了
完成启动后用浏览器访问localhost:9200 或127.0.0.1:9200,如果看到如下信息就算可以成功访问了
二,操作数据库(浏览器api)
可以直接通过http api、postman来操作es数据库。
创建索引
模式:PUT
参数:/products(索引名 )
数据:
{
"settings": {
"number_of_shards": 1, (主分片的数量)
"number_of_replicas": 0 (副本分片的数量)
}
}
添加文档
模式:POST
参数: /products/_doc/1(指定文档id 1,如果不写doc 1 那么就会自动生成id)
{
"title":"天气",
"content":"晴天霹雳"
}
查询文档
模式:GET
参数:/products/_doc/1(指定文档id)
更新文档
es中更新文档是先删除再添加
模式:PUT
参数:/products/_doc/1(指定文档id)
删除文档
模式:DELETE
参数:/products/_doc/1(指定文档id)
三,操作数据库(Python)
安装Elasticsearch
pip install Elasticsearch
初始化
from flask import Flask, request, jsonify
from elasticsearch import Elasticsearch
#链接目标数据库
es = Elasticsearch(hosts="localhost:9200")
创建索引
es.indices.create(index='游戏攻略', body={})
向索引插入文档
doc = {
'title':title,
'content':content
}
es.index(index='游戏攻略', body=doc)
查找索引
query = {
'query': {
'match': {
# 'title': title,
'content': content
}
# "match_all": {}
}
}
result = self.es.search(index=indexName, body=query)
# print(result)
if result['_shards']['total'] > 0:
print('找到相关数据')
删除索引
es.indices.delete(index=index)
四,问题解决
-
如果出现“method is deprecated. Use ‘Elasticsearch.options()’ instead”
第一种方法:将创建索引的方式改为es.indices.create(index=‘身份介绍2’, body=doc) x这种形式就行了
第二种方法:版本降级 pip install elasticsearch==7.13.0 -
如果在浏览器测试时出现下面这个框,或提示“security_exception”,就把elasticserch.yaml 的xpack.security.enabled设为 false
-
如果提示“Could not rename log file ‘logs/gc.log’ to ‘logs/gc.log.20’ (Permission denied).”
4.python 安装
pip install llama-index-vector-stores-elasticsearch
pip install elasticsearch