python操作elasticsearch-全文检索、拼写纠错、补全提示
1、首先安装elasticsearch包
pip install elasticsearch (一般会包含新旧版本,如果想要特定的版本,比如5.x 可以在后面加5数字)
"""
1、首先安装elasticsearch包
pip install elasticsearch (一般会包含新旧版本,如果想要特定的版本,比如5.x 可以在后面加5数字)
"""
from elasticsearch import Elasticsearch
hosts = [
"http://127.0.0.1:9200"
]
es = Elasticsearch(hosts=hosts,
http_auth=("elastic", "swq1996"),
# basic_auth=("elastic", "swq1996"), # 这个没用..
# 启动前嗅探es集群服务器
sniff_on_start=True,
# es集群服务器节点连接异常时是否刷新es节点信息
sniff_on_connection_fail=True,
# 每60秒刷新节点信息
sniffer_timeout=60)
def test():
ret = es.get(index="articles", doc_type="article", id="24")
print(ret["_source"]["title"])
# print(es.info(human=True))
def test_search(search_text):
"""全文检索"""
body_dict = {
"_source": ["title"],
"query": {
"match": {
"title": search_text
}
}
}
ret = es.search(index="articles", doc_type="article", body=body_dict)
print(ret)
def suggest_test(search_text):
"""拼写纠错"""
body_dict = {
"_source": ["title"],
"suggest": {
"text": search_text, # 用户输入的文本(也就是想要被纠错的文本)
"word-phrase": { # //这个名字自己起的,会在查询结果中显示
"phrase": {
"field": "title", # 指定类型的字段
"size": 3
}
}
}
}
ret = es.search(index="articles", doc_type="article", body=body_dict)
print(ret)
def completion_suggest_test(search_text):
"""补全提示"""
body_dict = {
"suggest": { # 建议查询的关键词
"title-suggest": { # 自己起名 用于获取结果
"prefix": "地区", # 用户输入的需要补全的关键词
"completion": { # 补全建议
"field": "suggest" # 从当前表中的哪个字段(suggest)提供补全建议
}
}
}
}
ret = es.search(index="completions", doc_type="words", body=body_dict)
print(ret)
def dsl_test():
# https://elasticsearch-dsl.readthedocs.io/en/latest/search_dsl.html
from elasticsearch6_dsl import Search
# 全文检索
# search = Search(using=es, index="articles")
# search.source("title,user_id")
# search.query("match", title="中国")
# search.filter("term", status=2)
# search.sort("-user_id")
# resp = search.execute()
# print(resp.to_dict())
# 分页,直接用切片的方式重新赋值即可
# # {"from": 10, "size": 10}
# search = search[10:20]
# 拼写纠错
search = Search(using=es, index="articles")
# 第三个参数:term、phrase 、completion
search = search.suggest("my_suggest", "pyth", phrase={'field': 'title'})
# suggest.doc_type("article") # 他这里不需要指定类型了...相对于你用字典当作body传好了不少
ret = search.execute()
print(ret.suggest.my_suggest)
print(ret.suggest.my_suggest[0].options[0].text)
# 输入补全
search = Search(using=es, index="completions")
search = search.suggest("my_completion", "地区", completion={'field': 'suggest'})
ret = search.execute()
print(ret.suggest.my_completion)
if __name__ == '__main__':
# test()
# test_search("中国")
# suggest_test("pyth")
# completion_suggest_test("地区")
dsl_test()
elasticsearch-dsl
原生操作elasticsearch是挺麻烦的,容易写错。因为有些查询要嵌套太多字典了.....
所以有一个叫elasticsearch-dsl的包,安装也是要根据es的版本来对应安装。
参考:https://elasticsearch-dsl.readthedocs.io/en/latest/
python操作elasticsearch-全文检索、拼写纠错、补全提示的更多相关文章
- ES系列十三、Elasticsearch Suggester API(自动补全)
1.概念 1.补全api主要分为四类 Term Suggester(纠错补全,输入错误的情况下补全正确的单词) Phrase Suggester(自动补全短语,输入一个单词补全整个短语) Comple ...
- python命令行下tab键补全命令
在python命令行下不能使用tab键将命令进行补全,手动输入又很容易出错. 解决:tab.py #/usr/bin/env python # -*- coding:utf-8 -*- ''' 该模块 ...
- Python 操作 ElasticSearch
Python 操作 ElasticSearch 学习了:https://www.cnblogs.com/shaosks/p/7592229.html 官网:https://elasticsearch- ...
- pycharm输入代码后,没有补全提示
安装pycharm后,输入代码后,没有补全提示 首先检查是否关闭了代码提示,如下图,将红框中"Power Save Mode"前的勾去掉 第二步,如果在输入某些代码时还是没有补全提 ...
- 在Ubuntu16.04中python环境下实现tab键补全
1.编写tab.py的代码: 1 #!/usr/bin/env python 2 # python startup file 3 import sys 4 import readline 5 impo ...
- Python 在 Terminal 中的自动补全
为了在 Terminal 中使用 Python 更加方便,在 home 目录下添加脚本 .pythonstartup,内容如下, 然后在 .bashrc 中添加 export PYTHONSTARTU ...
- python操作elasticsearch增、删、改、查
最近接触了个新东西--es数据库 这东西虽然被用的很多,但我是前些天刚刚接触的,发现其资料不多,学起来极其痛苦,写个文章记录下 导入库from elasticsearch import Elastic ...
- Python操作ElasticSearch
Python批量向ElasticSearch插入数据 Python 2的多进程不能序列化类方法, 所以改为函数的形式. 直接上代码: #!/usr/bin/python # -*- coding:ut ...
- python操作Elasticsearch (一、例子)
E lasticsearch是一款分布式搜索引擎,支持在大数据环境中进行实时数据分析.它基于Apache Lucene文本搜索引擎,内部功能通过ReST API暴露给外部.除了通过HTTP直接访问El ...
- python机器学习实现人脸图片自动补全
人脸自动补全 关注公众号"轻松学编程"了解更多. 1.导包 import matplotlib.pyplot as plt import numpy as np import pa ...
随机推荐
- 单节点 RAID6 可靠性模型
介绍 独立磁盘冗余阵列(Redundant Arrays of Independent Disks, RAID)是存储业界为保证数据可用性.可靠性和完整性所采用的重要技术,即使在分布式多副本如此流行和 ...
- API接口开发管理平台--多领域企业数字化管理解决方案
随着数字化时代的到来,企业需要进行数字化转型才能更好地适应市场需求和用户需求.而API接口则是数字化转型中的重要组成部分,可以帮助企业更好地管理信息,提高效率.本文将介绍挖数据解决方案--API接口开 ...
- 如何保持 SSH 会话不中断?
哈喽大家好,我是咸鱼 不知道小伙伴们有没有遇到过下面的情况: 使用终端(XShell.secureCRT 或 MobaXterm 等)登录 Linux 服务器之后如果有一段时间没有进行交互,SSH 会 ...
- Couchdb-权限绕过--命令执行--(CVE-2017-12635)&&(CVE-2017-12636)--H2database命令执行--(CVE-2022-23221)
Couchdb-权限绕过--命令执行--(CVE-2017-12635)&&(CVE-2017-12636)--H2database命令执行--(CVE-2022-23221) 环境概 ...
- 浅谈关于LCA
prologue 本身只会 tarjan 和 倍增法求LCA 的,但在发现有一种神奇的\(O(1)\) 查询 lca 的方法,时间优化很明显. main body 倍增法 先讨论倍增法,倍增法求 lc ...
- 【算法】游戏中的学习,使用c#面向对象特性控制游戏角色移动
最近,小悦的生活像是一首繁忙的交响曲,每天忙得团团转,虽然她的日程安排得满满当当,但她并未感到充实.相反,她很少有时间陪伴家人,这让她感到有些遗憾.在周五的午后,小悦的哥哥突然打来电话,他的声音里充满 ...
- 手撕Vue-编译指令数据
经过上一篇的分析,完成了查找指令和模板的功能,接下来就是编译指令的数据了. 所以本章节主要处理的方法则是 buildElement 方法,我们先分析一下我们所拿到的数据在进行编码,这样会更加清晰一些. ...
- PolarD&N2023秋季个人挑战—Crypto全解
EasyRSA (额..这个题看错了不是挑战赛的.这里当做好题记录下来了) 题目信息:500 分 5 Polar币 from Crypto.Util.number import bytes_to_lo ...
- ansible-playbook应用
ansible-playbook剧本: 如上使用Ad-hoc方式点对点命令执行,可以管理远程主机,如果服务器数量很多,配置信息比较多,还可以利用ansible playbook编写剧本.从而以非常简单 ...
- Godot - 创建翻译文件(常量表)
版本 Godot 3.1.2 背景 Godot的UI系统封装的很难受, 一些东西很难改动, 比如这个AcceptDialog的"确定""取消"按钮, 特别是在编 ...