python使用ElasticSearch7.17.6笔记

这篇具有很好参考价值的文章主要介绍了python使用ElasticSearch7.17.6笔记。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

数操作系统:windows10

我开始使用最新的版本,8.4.1但是使用过程中kibana启动不了,就索性使用旧版;

下载地址:

es7.17.6 下载地址 

kibana7.17.6下载地址

解压到合适的位置,更改elasticsearch.yml

添加配置如下:

cluster.name: robin-es
node.name: node-1
network.host: 0.0.0.0
http.port: 9200
cluster.initial_master_nodes: ["node-1"]

更改kibana.yml配置

i18n.locale: "zh-CN"

到各自的bin目录下启动两个服务bat文件,

在浏览器中执行http:://localhost:9200

可以看到json就对了

{
  "name" : "node-1",
  "cluster_name" : "robin-es",
  "cluster_uuid" : "pAvuRyRESuCHtbTnfdWrvA",
  "version" : {
    "number" : "7.17.6",
    "build_flavor" : "default",
    "build_type" : "zip",
    "build_hash" : "f65e9d338dc1d07b642e14a27f338990148ee5b6",
    "build_date" : "2022-08-23T11:08:48.893373482Z",
    "build_snapshot" : false,
    "lucene_version" : "8.11.1",
    "minimum_wire_compatibility_version" : "6.8.0",
    "minimum_index_compatibility_version" : "6.0.0-beta1"
  },
  "tagline" : "You Know, for Search"
}

使用python需要添加一下相关的库,我这里使用国内的库,并且使用代理,

注意:建议使用对应版本的库,否则可能不兼容。

pip install -i https://pypi.tuna.tsinghua.edu.cn/simple/   elasticsearch==7.17.6 --proxy="http://127.0.0.1:1081"
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple/   elasticsearch[async]==7.17.6 --proxy="http://127.0.0.1:1081"

连接数据库:

indexName = "student"
client = Elasticsearch(
    ['127.0.0.1:9200'],
    # 在做任何操作之前,先进行嗅探
    # sniff_on_start=True,
    # # 节点没有响应时,进行刷新,重新连接
    sniff_on_connection_fail=True,
    # # 每 60 秒刷新一次
    sniffer_timeout=60
)

写几个增删改查的函数:

需要注意:7.15版本以上使用了新的函数,旧的方式已经不适用了

# 推荐使用  elasticsearch  需要注意版本问题
from queue import Empty
from elasticsearch import Elasticsearch
from elasticsearch import *
import json
# es 7.17


def checkIndexByName(client, indexName):
    try:
        res = client.indices.get(index=indexName)
        # print(res)
        return True
    except Exception as ex:
        return False

# 创建索引
def createIndex(client, name,  doc):
    ret = False
    try:
        # Elasticsearch.options()
        resp = client.indices.create(index=name, mappings=doc["mappings"])
        # print(resp['result'])
        ret = True
    except Exception as ex:
        print(ex)
        return False

    return ret

# 删除索引 
def dropIndex(client, name):
    ret = False
    try:
        # Elasticsearch.options()
        result = client.indices.delete(index=name)
        ret = True
    except:
        return False

    return ret


def addDoc(client, index, doc, id):
    # 重复添加,数据覆盖
    try:
        resp = client.index(index=index, document=doc, id=id)
        print(resp['result'])
        return True
    except Exception as e:
        print("create index error")
        return False


def delDocFromIndex(client, index, id):
    try:
        res = client.delete(index=index, id=id)
        print(res['_shards']['successful'])
        return '1'
    except Exception as e:
        print(e)
        return '0'


def findDocById(client, index, id):
    try:
        res = client.get(index=index, id=id)
        return res['_source']
    except Exception as e:
        print(e)
        return 'nil'

创建索引的过程,可以在外部配置文件中设置相关的参数,

比如我们创建一个学生的相关索引,我们建立一个配置文件student.json

{
    "settings": {
        "index": {
            "number_of_shards": 1,
            "number_of_replicas": 0
        }
    },
    "mappings": {
        "dynamic": "strict",
        "properties": {
            "name": {
                "type": "key"
            },
            "age": {
                "type": "long"
            },
            "birthday": {
                "type": "date"
            }
        }
    }
}

之后,我们创建索引时候这样使用:

def load_json(filePath):
    data = open(filePath, 'r').read()
    return json.loads(data)


docMapping = load_json("./student.json")
# print(docMapping)


#dropIndex(client, indexName, result)
ret = checkIndexByName(client, indexName)
if not ret:
    print("\nindex is exsit = %d" % ret)
    createIndex(client, indexName, docMapping)

如果没有索引,则创建一下;

在kibana的开发工具中可以看到相关的结果:

python使用ElasticSearch7.17.6笔记

之后, 添加2个记录(文档)试试

doc = {

    "name": "灰太狼",
    "age": 22,
    "birthday": "2000-02-02",
    "tags": ["男"]

}
res = addDoc(client, indexName, doc, 13810500001)
# print(res)

doc = {

    "name": "美羊羊",
    "age": 10,
    "birthday": "2010-01-01",
    "tags": ["女"]

}
res = addDoc(client, indexName, doc, 13810500002)
# print(res)

可以在kibana中看到:

python使用ElasticSearch7.17.6笔记

python使用ElasticSearch7.17.6笔记 

 目前位置,基本的增删改查,都实现了,但是还需要复杂的查询:

bodyQueryAll = {
    "query": {
        "match_all": {}
    }
}
res = client.search(index=indexName, query=bodyQueryAll["query"])
print("查询到%d 个" % res['hits']['total']['value'])

items = res["hits"]["hits"]
# print(items)
for item in items:
    print("index=%s, id=%s doc=%s" %
          (item['_index'], item['_id'], item['_source']))
查询到2 个
index=student, id=13810501001 doc={'name': '灰太狼', 'age': 22, 'birthday': '2000-02-02', 'tags': ['男']}
index=student, id=13810501002 doc={'name': '美羊羊', 'age': 21, 'birthday': '2000-01-01', 'tags': ['女']}

在kibana中,是这样的:

python使用ElasticSearch7.17.6笔记

 

知道了查询后返回数据的结构了,就可以提取我们想要的数据了,

再添加2个查询函数:

def queryAll(client, indexName):
    bodyQueryAll = {
        "query": {
            "match_all": {}
        }
    }
    res = client.search(index=indexName, query=bodyQueryAll["query"])
    n = res['hits']['total']['value']
    #print("查询到%d 个" % n)

    items = res["hits"]["hits"]
    # print(items)
    # for item in items:
    #     print("index=%s, id=%s doc=%s" %
    #           (item['_index'], item['_id'], item['_source']))
    return (n, items)


def queryByDoc(client, indexName, query):
    res = client.search(index=indexName, query=query)
    n = res['hits']['total']['value']
    items = res["hits"]["hits"]
    return (n, items)

测试代码如下:

print("查全量:")
res = queryAll(client, indexName)
n = res[0]
items = res[1]
# print(items)
for item in items:
    print("index=%s, id=%s doc=%s" %
          (item['_index'], item['_id'], item['_source']))


queryNames = {
    "bool":
    {
        "should": [
            {"match":
                {"name": "美羊羊"}
             },
            {
                "match": {"name": "喜羊羊"}
            }
        ]
    }
}

print("查名字:")
res = queryByDoc(client, indexName, queryNames)
n = res[0]
items = res[1]
# print(items)
for item in items:
    print("index=%s, id=%s doc=%s" %
          (item['_index'], item['_id'], item['_source']))

输出:

查全量:
index=student, id=13810501001 doc={'name': '灰太狼', 'age': 22, 'birthday': '2000-02-02', 'tags': ['男']}
index=student, id=13810501002 doc={'name': '美羊羊', 'age': 21, 'birthday': '2000-01-01', 'tags': ['女']}
查名字:
index=student, id=13810501002 doc={'name': '美羊羊', 'age': 21, 'birthday': '2000-01-01', 'tags': ['女']}

kibana中这样的:

python使用ElasticSearch7.17.6笔记

 

参考:python操作Elasticsearch7.x - lshan - 博客园

Elasticsearch API Reference — Python Elasticsearch client 8.4.1 documentation

python操作Elasticsearch7.17.0_有勇气的牛排的博客-CSDN博客

https://github.com/elastic/elasticsearch-py/issues/1698

elasticsearch——入门 - 走看看文章来源地址https://www.toymoban.com/news/detail-469469.html

到了这里,关于python使用ElasticSearch7.17.6笔记的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • elasticsearch7.17.3 实现类似mysql的like查询

    前言:现在想要实现在elasticsearch中类似于mysql的like查询方式,有下面几种方法可以参考 建议 :wildcard方法是纯纯的like查询方式平替,但是性能差,上百GB的数据量后就会很慢。根据自己业务量需求,前面两种方式能解决的情况下尽量用前面两种方式。前两种方式可以修改索

    2024年02月08日
    浏览(38)
  • 【软件安装教程】elasticsearch7.17安装设置用户名和密码

    链接:https://pan.baidu.com/s/1f3jTc4kaQvu_i9pVbuXdPQ  提取码:l3g1  下载后解压    bin :存入一些二进制脚本,包括启动 ES、安装插件命令等都在这里。 config :存放 ES 的配置文件,主要是 elasticsearch.yml 。 jdk :ES 自带的 Java 环境,所以我们无需自己安装 Java 环境。 lib :存放 ES 相关

    2024年02月13日
    浏览(48)
  • Visual Studio 2022 v17.6 正式发布

    Visual Studio 17.6 正式发布,这个最新版本提供了一系列强大的工具和功能,旨在使你能够制作出最先进的应用程序。 通过 Visual Studio 2022,目标是帮助你在更短的时间内完成 IDE 内的所有开发任务,在这个版本中,微软根据开发者的反馈改进了几个核心体验的性能。 性能改进

    2024年02月06日
    浏览(67)
  • Elasticsearch7学习笔记(尚硅谷)

    Elasticsearch是一个 实时的分布式搜索和分析引擎 。它可以帮助你用前所未有的速度去处理大规模数据。它可以用于 全文搜索,结构化搜索以及分析 ,当然你也可以将这三者进行组合。 Elasticsearch是一个建 立在全文搜索引擎 Apache Lucene™ 基础 上的搜索引擎,可以说Lucene是当今

    2024年01月23日
    浏览(48)
  • ElasticSearch7.6.x 学习笔记

    ElasticSearch,简称es,es是一个 开源 的 高扩展 的 分布式全文检索引擎 ,它可以近乎实时的存储、检索数据。且本身扩展性很好,可以扩展到上百台服务器,处理PB级别的数据。es也使用java开发并使用Lucene作为核心来实现所用索引和搜索的功能。但是,它的目的是通过简单的

    2023年04月16日
    浏览(40)
  • Visual Studio 2022 版本 17.6 预览版发行版小范围更新,值得你一看

    写在前面:       Visual Studio 2022 v17.6 是vs2022 v17.6小版本的一个更新,此版本拓展了 vs2022 v17.5版本的功能,旨在提高您的工作效率,无论你是 .NET 开发人员、游戏开发人员和/或C++开发人员 此博客总结了此版本中的主要更新和修改。 目录 集成开发环境生产力 大括号对着色

    2024年02月09日
    浏览(33)
  • 本地部署Canal笔记-实现MySQL与ElasticSearch7数据同步

    本地搭建canal实现mysql数据到es的简单的数据同步,仅供学习参考 建议首先熟悉一下canal同步方式:https://github.com/alibaba/canal/wiki 本地搭建MySQL数据库 本地搭建ElasticSearch 本地搭建canal-server 本地搭建canal-adapter 本地环境为window11,大部分组件采用docker进行部署,MySQL采用8.0.27, 推荐

    2024年02月02日
    浏览(38)
  • elasticsearch7基础用法及java中使用

    GET、POST、PUT、DELETE、HEAD。 id content 1001 my name is zhang san 1002 i name is li si 1003 my name is wang wu keyword id name 1001,1002,1003 zhang 1001a my 1001,1003 PUT请求:http://127.0.0.1:9200/索引名称 返回值: 表头 含义 health 当前服务器健康状态: green (集群完整) yellow (单点正常、集群不完整) red(单点不正

    2024年02月03日
    浏览(25)
  • 离线安装Elasticsearch7.15.1集群(使用内置jdk)

    背景: 以192.168.50.210、192.168.50.211、192.168.50.212这三台机器为例,进行相关的配置 而我本地的jdk是1.8的,已经不符合要求了。但项目中没有那么高版本的jdk,也只想用1.8版本的,只是es用自己内置的jdk而已。 ES安装 1.下载相应的包文件 https://www.elastic.co/cn/downloads/elasticsearch 2.解

    2024年02月16日
    浏览(27)
  • springboot集成Elasticsearch7.16,使用https方式连接并忽略SSL证书

    千万万苦利用科学上网找到了,记录一下

    2024年02月09日
    浏览(38)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包