文章
问答
冒泡
在Python中使用ES查询

安装ES和kibana

安装:
    docker pull elasticsearch:7.17.1
    docker pull kibana:7.17.1
启动:
    docker run -d --name elasticsearch  -p 9200:9200 -p 9300:9300 -e  "discovery.type=single-node" -e ES_JAVA_OPTS="-Xms256m -Xmx256m" elasticsearch:7.17.1
    docker run -d --name kibana -p 5601:5601 kibana:7.17.1

注意⚠️:ES版本和kibana版本要一致

python安装es包

pip install elasticsearch

创建ES客户端

from elasticsearch import Elasticsearch

class ElasticSearchClient:
    _client = None

    def __new__(cls, *args, **kwargs):
        if cls._client is None:
            # check elasticsearch service url
            if not settings.ELASTIC_SEARCH_URL:
                raise ValueError("Please provide the elasticsearch service url.")
            cls._client = Elasticsearch(
                [settings.ELASTIC_SEARCH_URL],
                http_auth=[
                    settings.ELASTIC_SEARCH_USER,
                    settings.ELASTIC_SEARCH_PASSWORD,
                ],
                timeout=60,
            )
        return cls._client

创建/删除索引

    def index():
        es_client = ElasticSearchClient()
        es_client.index(index="索引名称", id=id, body=doc)

    def delete_index():
        es_client = ElasticSearchClient()
        es_client.delete(index="索引名称", id=id)

查询

es_client = ElasticSearchClient()    
def do_match():
        resp = es_client.search(
            index="索引名称",
            body={
                "query": {"ES搜索语法"},
                "script_fields": self.script_fields,
                "min_score": "最低分",  不返回低于最低分的文档
            },
            _source="是否显示文档详情", #False 我们只需要文档的id,然后根据id去数据库拿详细的信息
            size="搜索数量",
        )
    """
    返回的结构是这样,我们只要匹配到的文档即可
    {
      "took" : 2,
      "timed_out" : false,
      "_shards" : {
        "total" : 1,
        "successful" : 1,
        "skipped" : 0,
        "failed" : 0
      },
      "hits" : {
        "total" : {
          "value" : 1,
          "relation" : "eq"
        },
        "max_score" : 1.0,
        "hits" : [
          {
            "_index" : "jobs",
            "_type" : "_doc",
            "_id" : "1",
            "_score" : 1.0
          }
        ]
      }
    }
    """
        # 文档关键信息是_id和_score
        return resp["hits"]["hits"]

elasticsearch

关于作者

小乙哥
学海无涯,回头是岸
获得点赞
文章被阅读