ES学习(三)--查询

一、query string search
  A、搜索全部商品
    GET /ecommerce/_search
  B、 查询商品名为牙膏,价格降序排列
    GET /ecommerce/_search?q=name:yagao&sort=price:desc

二、 query DSL
  A、 查询所有商品
    GET /ecommerce/_search
    {
      "query": {
        "match_all": {}
      }
    }
  B、 查询所有名称包含yagao的商品,同时按照价格降序排列
    GET /ecommerce/_search
    {
      "query": {
        "match": {
          "name": "yagao"
        }
      },
      "sort": [
        {
          "price": {
            "order": "desc"
          }
        }
      ]
    }

三、 分页
  A、GET /ecommerce/_search
    {
      "query": {
        "match_all": {}
      },
      "from": 0,
      "size": 2
    }

四、 查询指定字段
  A、GET /ecommerce/_search
    {
      "query": {
        "match_all": {}
      },
      "_source": ["name","desc","price"]
    }

五、 query filter
  A、搜索商品名称包含牙膏且售价大于25的
    GET /ecommerce/_search
    {
      "query": {
        "bool": {
          "must": [
            {
              "match": {
                "name": "yagao"
              }
            }
          ],
          "filter": {
            "range": {
              "price": {
                "gte": 25
              }
            }
          }
        }
      }
    }

六、 full-text search
  A、GET /ecommerce/_search
    {
      "query": {
        "match": {
          "producer": "yagao producer"
        }
      }
    }

七、 phrase search
  A、GET /ecommerce/_search
    {
      "query": {
        "match_phrase": {
          "producer": "yagao producer"
        }
      }
    }

八、 hightlight search
  A、GET /ecommerce/_search
    {
      "query": {
        "match": {
          "producer": "producer"
        }
      },
      "highlight": {
        "fields": {
          "producer": {}
        }
      }
    }

九、组合多个搜索条件

  A、bool查询

    GET /article/_search
    {
      "query": {
        "bool": {
          "must": [
            {
              "bool": {
                "should": [
                  {
                    "match": {
                      "title": "hadoop"
                    }
                  },
                  {
                    "match": {
                      "author_id": "111"
                    }
                  }
                ]
              }
            }
          ],
          "should": [
            {
              "match": {
                "content": "elasticsearch"
              }
            }
          ],

          "minimum_should_match": 4
        }
      }
    }

十、multimatch

  GET /article/_search
  {
    "query": {
      "multi_match": {
        "query": "elasticsearch",
        "fields": ["title","content"]
      }
    }
  }

十一、term query

  A、和match_phrase区别

    term不会分词,是直接拿去查,而match_phrase会分词然后再去匹配,要求文档包含这些分词且顺序一致。所以使用term要确保字段类型是keyword或者会有这个分词。

十二、单纯使用过滤

  GET /article/_search
  {
    "query": {
      "constant_score": {
        "filter": {
          "range": {
            "FIELD": {
              "gte": 10,
              "lte": 20
            }
          }
        },
        "boost": 1.2
      }
    }
  }

十三、将一个field索引两次解决字符串排序问题

  如果对一个字符串进行排序,结果往往不准确,因为分词后是多个单词,再排序就不是我们想要的结果了。通常是将一个string field建立两次索引,一个分词,一个进行搜索;一个部分词,用来进行排序。

原文地址:https://www.cnblogs.com/DjanFey/p/12112730.html