Flask项目中实现搜索

Flask项目中实现搜索

  1. python中使用elasticsearch
    1. 安装

      pip install elasticsearch
      
    2. 对于elasticsearch 5.x 版本 需要按以下方式导入

      from elasticsearch5 import Elasticsearch
      
      # elasticsearch集群服务器的地址
      ES = [
          '127.0.0.1:9200'
      ]
      
      # 创建elasticsearch客户端
      es = Elasticsearch(
          ES,
          # 启动前嗅探es集群服务器
          sniff_on_start=True,
          # es集群服务器结点连接异常时是否刷新es结点信息
          sniff_on_connection_fail=True,
          # 每60秒刷新结点信息
          sniffer_timeout=60
      )
      
    3. 使用

      query = {
             
          'query': {
             
              'bool': {
             
                  'must': [
                      {
             'match': {
             '_all': 'python web'}}
                  ],
                  'filter': [
                      {
             'term': {
             'status': 2}}
                  ]
              }
          }
      }
      # index:库名,doc_typ:表名 类型, body:查询条件 字典
      ret = es.search(index='articles', doc_type='article', body=query)
      print(ret['hits']['hits'])
      
  2. suggest建议查询(实现户业务:没完全输入完成的情况,可以做自动补全提升)
    1. 拼写纠错

      # 当我们输入错误的关键词phtyon web时,es可以提供根据索引库数据得出的正确拼写python web
      curl 127.0.0.1:9200/articles/article/_search?pretty -d '
      {
          "from": 0,
          "size": 10,
          "_source": false,
          "suggest": {
              "text": "phtyon web",
              "word-phrase": {
                  "phrase": {
                      "field": "_all",
                      "size": 1
                  }
              }
          }
      }'
      # word-phrase表示返回来的数据放在word-phrase中。
      # phrase表示以短语的方式返回,field指定从哪里获取数据,size指定返回一条数据。
      
    2. 自动补全

      自动补全需要用到suggest查询建议中的type=completion,所以原先建立的文章索引库不能用于自动补全,需要再建立一个自动补全的索引库

      1. 创建自动补全的索引库

        curl -X PUT 127.0.0.1:9200/completions -H 'Content-Type: application/json' -d'
        {
           "settings" : {
               "index": {
                   "number_of_shards" : 3,
                   "number_of_replicas" : 1
               }
           }
        }'
        
      2. 创建自动补全的映射类型

        curl -X PUT 127.0.0.1:9200/completions/_mapping/words -H 'Content-Type: application/json' -d'
        {
             "words": {
                  "properties": {
                      "suggest": {
                          "type": "completion",
                          "analyzer": "ik_max_word"
                      }
                  }
             }
        }'
        # 自动补全建议,必须是completion类型。
        
      3. 使用logstash导入自动补全初始数据

        # 创建脚本:
        	vim /home/python/logstash_mysql_completion.conf
        # 脚本内容:
        input{
                 
             jdbc {
                 
                 jdbc_driver_library => "/home/python/mysql-connector-java-8.0.13/mysql-connector-java-8.0.13.jar"
                 jdbc_driver_class => "com.mysql.jdbc.Driver"
                 jdbc_connection_string => "jdbc:mysql://127.0.0.1:3306/toutiao?tinyInt1isBit=false"
                 jdbc_user => "root"
                 jdbc_password => "mysql"
                 jdbc_paging_enabled => "true"
                 jdbc_page_size 
  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
数据库存储介质有flash闪存、SSD、SAS、SATA、HBase和ES。 闪存是一种具有非易失性、电子可擦写可编程存储介质,它具有较快的读写速度和低延迟。闪存常用于高性能数据库的存储,可以提升数据库的响应速度和数据访问效率。 SSD(Solid State Drive)也是一种采用闪存作为存储介质的装置,相比传统的机械硬盘,它具有更高的读写速度、更低的能耗和更小的体积。SSD常用于需要高速数据存取的数据库系统,可以提供更快的数据传输速度和更高的系统性能。 SAS(Serial Attached SCSI)是一种高性能的传输协议,它可以连接多个存储设备并提供高速数据传输。SAS通常用于型和大型企业级数据库系统,可以提供高吞吐量和高并发性能。 SATA(Serial ATA)是一种常见的存储接口,通常用于个人计算机和小型数据库系统。相比低端的机械硬盘,SATA提供更好的性能和数据传输速度,但相较于SAS和闪存,它的吞吐量和延迟较高。 HBase是一个开源的分布式数据库,它基于Hadoop平台,并使用HDFS(Hadoop Distributed File System)作为存储介质。HBase适合存储大规模、稀疏和非结构化的数据,可以实现高度可扩展性和高吞吐量的数据访问。 ES(Elasticsearch)是一个基于Lucene的分布式搜索引擎,它可以用于实时存储、检索和分析大规模数据。ES可以快速地索引和搜索大量数据,并提供高可靠性和高性能的数据存储和查询功能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值