参考文章:https://elasticsearch-py.readthedocs.io/en/v8.8.2/
参考文章:https
from elasticsearch import Elasticsearch
es = Elasticsearch(hosts=["https://192.168.1.1:9200"],
basic_auth=['elastic', '123456'],
verify_certs=False)
>>> es.ping()
True
>>> es.info()
{ 'name' : 'qhdata-dev',
'cluster_name' : 'elasticsearch',
'cluster_uuid' : 'un55kUpqQ9iFGEfp5UUQ5g',
'version' : { 'number' : '8.8.2',
'build_flavor' : 'default',
'build_type' : 'deb',
'build_hash' : '98e1271edf932a480e4262a471281f1ee295ce6b',
'build_date' : '2023-06-26T05:16:16.196344851Z',
'build_snapshot' : FALSE,
'lucene_version' : '9.6.0',
'minimum_wire_compatibility_version' : '7.17.0',
'minimum_index_compatibility_version' : '7.0.0' },
'tagline' : 'You Know, for Search' }
doc = [
{
'org_id': 'qh0000016598985',
'org_name': '山东京博石油化工有限公司', # 精确搜索使用的字段
'org_code': '167154095',
'org_usc_code': '913716251671540959'
},
{
'org_id': 'qh0000017998348',
'org_name': '山东天宏新能源化工有限公司', # 精确搜索使用的字段
'org_code': '670528461',
'org_usc_code': '913716256705284610'
},
{
'org_id': 'qh0000017996506',
'org_name': '山东昆仑京博能源有限公司', # 精确搜索使用的字段
'org_code': '577790166',
'org_usc_code': '913716255777901660'
},
{
'org_id': 'qh0000018265983',
'org_name': '诺力昂化学品(博兴)有限公司', # 精确搜索使用的字段
'org_code': '720705287',
'org_usc_code': '913716007207052873'
},
]
es_index = 'test_org_id'
es.indices.delete(index=es_index, ignore=[400, 404]) # 删除 Index
es.indices.create(index=es_index, ignore=400) # 创建 Index
es.indices.refresh()
# https://discuss.elastic.co/t/failed-to-parse-value-analyzed-as-only-true-or-false-are-allowed-es-upgrade-5-5-6-5/166473/2
mapping = {
'properties': {
'org_name': {
'type': 'text',
'analyzer': 'ik_max_word', # 模糊搜索分析器
'search_analyzer': 'ik_max_word',
"fields": {
"keyword": {
"type": "keyword", # 相当于额外一重索引,类型为keyword,为精确搜索
"ignore_above": 256 # 最多256个字符
}
}
},
'org_id': {
'type': 'keyword', # 强行锁定仅进行精确搜索
},
}
}
es.indices.put_mapping(index=es_index, body=mapping)
for i in doc:
es.index(index=es_index, document=i) # 自动随机生成唯一id,或者指定id
参考文章:https://www.elastic.co/guide/en/elasticsearch/reference/current/docs-get.html
>>> es.search(index=es_index, query={"match": {'org_name': '山东'}}) # 模糊搜索
ObjectApiResponse ({ 'took' : 1,
'timed_out' : FALSE,
'_shards' : { 'total' : 1, 'successful' : 1, 'skipped' : 0, 'failed' : 0 },
'hits' : { 'total' : { 'value' : 3, 'relation' : 'eq' },
'max_score' : 0.37365946,
'hits' : [{ '_index' : 'test_org_id',
'_id' : 'CWGOhYkBHWntshc80OFi',
'_score' : 0.37365946,
'_source' : { 'org_id' : 'qh0000017996506', 'org_name' : '山东昆仑京博能源有限公司', 'org_code' : '577790166', 'org_usc_code' : '913716255777901660' }},
{ '_index' : 'test_org_id',
'_id' : 'B2GOhYkBHWntshc80OEs',
'_score' : 0.35667494,
'_source' : { 'org_id' : 'qh0000016598985', 'org_name' : '山东京博石油化工有限公司', 'org_code' : '167154095', 'org_usc_code' : '913716251671540959' }},
{ '_index' : 'test_org_id',
'_id' : 'CGGOhYkBHWntshc80OFc',
'_score' : 0.35667494,
'_source' : { 'org_id' : 'qh0000017998348', 'org_name' : '山东天宏新能源化工有限公司', 'org_code' : '670528461', 'org_usc_code' : '913716256705284610' }}]}})
>>> es.search(index=es_index, query={"term": {'org_name.keyword': '山东昆仑京博能源有限公司'}}) # 精确搜索-使用keyword索引
ObjectApiResponse ({ 'took' : 1,
'timed_out' : FALSE,
'_shards' : { 'total' : 1, 'successful' : 1, 'skipped' : 0, 'failed' : 0 },
'hits' : { 'total' : { 'value' : 1, 'relation' : 'eq' },
'max_score' : 1.2039728,
'hits' : [{ '_index' : 'test_org_id',
'_id' : 'CWGOhYkBHWntshc80OFi',
'_score' : 1.2039728,
'_source' : { 'org_id' : 'qh0000017996506', 'org_name' : '山东昆仑京博能源有限公司', 'org_code' : '577790166', 'org_usc_code' : '913716255777901660' }}]}})
>>> es.search(index=es_index, query={"terms": {'org_name.keyword': ['山东昆仑京博能源有限公司', '山东京博石油化工有限公司']}}) # 精确搜索-多个词语
ObjectApiResponse ({ 'took' : 1,
'timed_out' : FALSE,
'_shards' : { 'total' : 1, 'successful' : 1, 'skipped' : 0, 'failed' : 0 },
'hits' : { 'total' : { 'value' : 2, 'relation' : 'eq' },
'max_score' : 1.0,
'hits' : [{ '_index' : 'test_org_id',
'_id' : 'B2GOhYkBHWntshc80OEs',
'_score' : 1.0,
'_source' : { 'org_id' : 'qh0000016598985', 'org_name' : '山东京博石油化工有限公司', 'org_code' : '167154095', 'org_usc_code' : '913716251671540959' }},
{ '_index' : 'test_org_id',
'_id' : 'CWGOhYkBHWntshc80OFi',
'_score' : 1.0,
'_source' : { 'org_id' : 'qh0000017996506', 'org_name' : '山东昆仑京博能源有限公司', 'org_code' : '577790166', 'org_usc_code' : '913716255777901660' }}]}})
>>> es.search(index=es_index, query={"term": {'org_code': '670528461'}}) # 精确搜索-非中文可以直接使用
ObjectApiResponse ({ 'took' : 1,
'timed_out' : FALSE,
'_shards' : { 'total' : 1, 'successful' : 1, 'skipped' : 0, 'failed' : 0 },
'hits' : { 'total' : { 'value' : 1, 'relation' : 'eq' },
'max_score' : 1.2039728,
'hits' : [{ '_index' : 'test_org_id',
'_id' : 'CGGOhYkBHWntshc80OFc',
'_score' : 1.2039728,
'_source' : { 'org_id' : 'qh0000017998348', 'org_name' : '山东天宏新能源化工有限公司', 'org_code' : '670528461', 'org_usc_code' : '913716256705284610' }}]}})
>>> es.get(index=es_index, id='CGGOhYkBHWntshc80OFc', ignore=[404]) # id查询
ObjectApiResponse ({ '_index' : 'test_org_id',
'_id' : 'CGGOhYkBHWntshc80OFc',
'_version' : 1,
'_seq_no' : 1,
'_primary_term' : 1,
'found' : TRUE,
'_source' : { 'org_id' : 'qh0000017998348', 'org_name' : '山东天宏新能源化工有限公司', 'org_code' : '670528461', 'org_usc_code' : '913716256705284610' }})
>>> es.mget(index=es_index, ids=['CGGOhYkBHWntshc80OFc','CWGOhYkBHWntshc80OFi',] , ignore=[404])
ObjectApiResponse ({ 'docs' : [{ '_index' : 'test_org_id',
'_id' : 'CGGOhYkBHWntshc80OFc',
'_version' : 1,
'_seq_no' : 1,
'_primary_term' : 1,
'found' : TRUE,
'_source' : { 'org_id' : 'qh0000017998348', 'org_name' : '山东天宏新能源化工有限公司', 'org_code' : '670528461', 'org_usc_code' : '913716256705284610' }},
{ '_index' : 'test_org_id',
'_id' : 'CWGOhYkBHWntshc80OFi',
'_version' : 1,
'_seq_no' : 2,
'_primary_term' : 1,
'found' : TRUE,
'_source' : { 'org_id' : 'qh0000017996506', 'org_name' : '山东昆仑京博能源有限公司', 'org_code' : '577790166', 'org_usc_code' : '913716255777901660' }}]})
tmp_doc = {
'org_id': 'qh0000016598985',
'org_name': '山东京博石油化工有限公司', # 精确搜索使用的字段
'org_code': '167154095',
'org_usc_code': '913716251671540959'
}
es.update(index=es_index, id='_WFwd4kBHWntshc80-AY', doc=tmp_doc)
tmp_doc = {
"script": { # 更新内容
"source": "ctx._source['org_code']='123123123123'",
"lang": "painless"
},
"query": { # 查询匹配
"term": {
"org_name.keyword": "山东天宏新能源化工有限公司"
}
}
}
es.update_by_query(index=es_index, body=tmp_doc)
es.delete(index=es_index, id='_WFwd4kBHWntshc80-AY', ignore=[404])
es.delete_by_query(index=es_index, query={"term": {'org_name.keyword': '山东昆仑京博能源有限公司'}})
ps:这里的删除,是指直接把数据标记为待删除,等系统后续从index中删除。