zoukankan      html  css  js  c++  java
  • 简单搜索入门

    1、query string search
    2、query DSL
    3、query filter
    4、full-text search
    5、phrase search
    6、highlight search
    *****************************************************************************************
    1、query string search
    搜索全部商品:GET /index/type/_search
    例如: GET /ecommerce/product/_search
    took:耗费了几毫秒
    timed_out:是否超时
    _shards:数据拆成了5个分片,所以对于搜索请求,会打到所有的primary shard(或者是它的某个replica shard也可以)
    hits.total:查询结果的数量,1个document
    hits.max_score:score的含义就是document对于一个search的相关度匹配分数,越相关,就越匹配,分数也越高
    "took": 2,
    "timed_out": false,
    "_shards": {
      "total": 5,
      "successful": 5,
      "failed": 0
    },
    "hits": {
      "total": 1,
      "max_score": 1,
      "hits": [
      {
        "_index": "ecommerce",
        "_type": "product",
        "_id": "2",
        "_score": 1,
        "_source": {
          "name": "jiajieshi yagao",
          "desc": "youxiao fangzhu",
          "price": 25,
          "producer": "jiajieshi producer",
          "tags": [
            "fangzhu"
          ]
        }
      }]
    }
    }
    query string search的由来,因为search参数都是以HTTP请求的query string来附带的
    搜索商品名称中包含yagao的商品,而且按照价格降序排序:
    GET /ecommerce/product/_search?q=name:yaogao&sort=price:desc
    适用于临时的查询,比如curl,快速的发出请求,来检索想要的信息,但是复杂的请求很难构建。在生产环境中很少使用query string search

    2、query DSL
    DSL:Domain Specified language,特定领域的语言
    http request body:请求体可以用json的格式来构建查询语法,比较方便,可以构建各种复杂的语法
    查询所有的商品
    GET /ecommerce/product/_search
    {
      "query" : {"match_all" : {} }
    }
    查询名称包含牙膏的商品,同时按照价格降序排序
    GET /ecommerce/product/_search
    {
      "query" : {
        "match" : {
          "name" : "yagao"
        }
      },
      "sort" : [
        {"price" : "desc"}
      ]
    }
    分页查询商品,总共有3条商品,假设每页就显示1条商品,现在显示第2页,所以就查询出来第2个商品
    GET /ecommerce/product/_search
    {
      "query" : { "match_all" : {} },
      "from" : 1,
      "size" : 1
    }
    指定要查询出来的字段,其余字段不查询
    GET /ecommerce/product/_search
    {
      "query" : { "match_all" : {} },
      "_source" : ["name","price"]
    }

    3、query filter
    搜索商品名称包含yagao,而且售价大于25的商品
    GET /ecommerce/product/_search
    {
      "query" : {
        "bool" : {
          "must" : {
            "match" : {
              "name" : "yagao"
            }
          },
          "filter" : {
            "range" : {
              "price" : { "gt" : 25 }
            }
          }
        }
      }
    }

    4、full-text search (全文检索)
    GET /ecommerce/product/_search
    {
      "query" : {
        "match" : {
          "producer" : "yagao producer"
        }
      }
    }
    producer这个字段会先被拆解,建立倒排索引
    yagao producer ---> yagao和producer

    5、phrase search (短语搜索)
    跟全文检索相反,全文检索会将输入的搜索串拆解,去倒排索引里面一一匹配,只要能匹配上任意一个拆解后的单词,就可以作为结果返回;phrase seach要求输入的搜索串,必须在指定的字段文本中完全包含,才可以匹配,并作为结果返回
    GET /ecommerce/product/_search
    {
      "query" : {
        "match_phrase" : {
          "producer" : "yaogao producer"
        }
      }
    }

    6、highlight search (高亮搜索结果)
    GET /ecommerce/product/_search
    {
      "query" : {
        "match" : {
          "producer" : "producer"
        }
      },
      "highlight" : {
        "fields" : {
          "producer" : {}
        }
      }
    }

  • 相关阅读:
    DJANGO
    前端--BootStrap
    前端--JQuery
    前端--JavaScript
    前端--CSS
    前端--HTML
    python中面试题积累
    python中一些小的知识点
    python中字典的增删改查及相关知识点
    python中列表的增删改查以及其它相关方法
  • 原文地址:https://www.cnblogs.com/qinjf/p/8445642.html
Copyright © 2011-2022 走看看