ElasticSearch ---- 查詢


 

模擬數據創建

首先利用head差檢查創建book索引

然后修改mappings配置

http方法:  post

鏈接地址:  http://192.168.253.129:9200/ book/novel/_mappings

{

  "novel": {

    "properties": {

      "word_count": {

        "type": "integer"

      },

      "author": {

        "type": "keyword"

      },

      "title": {

        "type": "text"

      },

      "publish_date": {

        "type": "date",

        "format": "yyyy-MM-dd HH:mm:ss || yyyy-MM-dd || epoch_millis"

      }

    }

  }

}

數據插入

第一條數據

http方法: put

連接地址: http://192.168.253.129:9200/book/novel/1

請求參數

{

  "author": "張三",

  "title": "移魂大法",

  "word_count": 1000,

  "publish_date": "2000-10-01"

}

{

  "author": "李三",

  "title": "JAVA入門",

  "word_count": 2000,

  "publish_date": "2010-10-01"

}

{

  "author": "張四",

  "title": "Python入門",

  "word_count": 2000,

  "publish_date": "2005-10-01"

}

{

  "author": "李四",

  "title": "Elasticsearch大法好",

  "word_count": 1000,

  "publish_date": "2017-08-01"

}

{

  "author": "王五",

  "title": "菜譜",

  "word_count": 5000,

  "publish_date": "2002-10-01"

}

{

  "author": "趙六",

  "title": "劍譜",

  "word_count": 10000,

  "publish_date": "1997-01-01"

}

{

  "author": "張三豐",

  "title": "太極拳",

  "word_count": 1000,

  "publish_date": "1997-01-01"

}

{

  "author": "瓦力",

  "title": "Elasticsearch入門",

  "word_count": 3000,

  "publish_date": "2017-08-20"

}

{

  "author": "很胖的瓦力",

  "title": "Elasticsearch精通",

  "word_count": 3000,

  "publish_date": "2017-08-15"

}

{

  "author": "牛魔王",

  "title": "芭蕉扇",

  "word_count": 1000,

  "publish_date": "2000-10-01"

}

{

  "author": "孫悟空",

  "title": "七十二變",

  "word_count": 1000,

  "publish_date": "2000-10-01"

}

2.2.4.1 簡單查詢

http方法: GET

http地址: http://192.168.253.129:9200/book/novel/1

book: 索引名稱

novel: type名稱

1: 文檔id

2.2.4.2 條件查詢

http方法: POST

http地址: http://192.168.253.129:9200/book/novel/_search

查詢所有數據

{

    "query": {

        "match_all": {}

    }

}

Query: 為查詢關鍵字

添加起始條數和記錄數

{

  "query": {

    "match_all": {}

  },

  "from": 1,

  "size": 1

}

 

關鍵詞查詢

{

  "query": {

    "match": {

      "title": "Elasticsearch"

    }

  },

  "sort": [

    {

      "publish_date": {

        "order": "desc"

      }

    }

  ]

}

Match中為匹配的字段和值

Sort中為排序字段

2.2.4.3 聚合查詢

關鍵詞:aggs

http方法: POST

http地址: http://192.168.253.129:9200/book/novel/_search

{

  "aggs": {

    "group_by_word_count": {

      "terms": {

        "field": "word_count"

      }

    },

    "group_by_publish_date": {

      "terms": {

        "field": "publish_date"

      }

    }

  }

}

 

對指定的字段進行計算

{

  "aggs": {

    "grades_word_count": {

      "stats": {

        "field": "word_count"

      }

    }

  }

}

2.2.5> 高級查詢

2.2.5.1子條件查詢-- Query context

特定字段查詢所指特定值

Query context

在查詢過程中, 除了判斷文檔是否滿足查詢條件之外, ES還會計算一個_score來標識匹配的程度, 旨在判斷目標文檔和查詢條件匹配的有多好.

Query context常用的查詢有全文本查詢字段級別的查詢

1. 全文本查詢: 針對文本類型數據
1) 模糊匹配

http方法: post

http地址: http://192.168.253.129:9200/book/novel/_search

關鍵詞: query(查詢關鍵詞), match(模糊匹配關鍵詞)

請求參數:

{

  "query": {

    "match": {

      "author": "瓦力"

    }

  }

}

或者

{

  "query": {

    "match": {

      "title": "elasticsearch入門"

    }

  }

}

模糊匹配會把查詢的字段進行拆分, 如title中的”elasticsearch入門”, 會查詢”elasticsearch”和”入門”兩個詞語所匹配的內容

2) 習語匹配

http方法: post

http地址: http://192.168.253.129:9200/book/novel/_search

關鍵詞: query(查詢關鍵詞), match_phrase(習語匹配關鍵詞)

請求參數:

{

  "query": {

    "match_phrase": {

      "title": "elasticsearch入門"

    }

  }

}

該查詢條件會將”title”字段中與”elasticsearch入門”相匹配的查出來

3) 多個字段的匹配查詢

http方法: post

http地址: http://192.168.253.129:9200/book/novel/_search

關鍵詞: query(查詢關鍵詞), muti_match(多字段匹配關鍵詞)

請求參數:

{

  "query": {

    "multi_match": {

      "query": "瓦力",

      "fields": [

        "author",

        "title"

      ]

    }

  }

}

該查詢條件會將”author”或者是”title”字段中包含”瓦力”的都查詢出來

 

 

4) 語法查詢(queryString)

支持通配符, 范圍查詢, 布爾查詢, 也可以用在正則表達式中,

http方法: post

http地址: http://192.168.253.129:9200/book/novel/_search

關鍵詞: query(查詢關鍵詞), query_string(語法查詢關鍵詞)

請求參數

查詢” elasticsearch”和” 大法”關鍵詞

{

  "query": {

    "query_string": {

      "query": "elasticsearch AND 大法"

    }

  }

}

關鍵詞OR的使用

{

  "query": {

    "query_string": {

      "query": "(elasticsearch AND 大法) OR Python"

    }

  }

}

指定字段和條件查詢

{

  "query": {

    "query_string": {

      "query": "瓦力 OR Elasticsearch",

      "fields": [

        "author",

        "title"

      ]

    }

  }

}

 

 

2. 字段級別的查詢: 針對結構化數據, 如數字, 日期等.

結構化數據的查詢

http方法: post

http地址: http://192.168.253.129:9200/book/novel/_search

關鍵詞: query(查詢關鍵詞), term(具體項關鍵詞)

查詢單詞數”word_count”為1000的數據

{

  "query": {

    "term": {

      "word_count": 1000

    }

  }

}

查詢字數范圍在1000-2000之間的圖書

關鍵詞: range, gte大於等於, lte小於等於

{

  "query": {

    "range": {

      "word_count": {

        "gte": 1000,

        "lte": 2000

      }

    }

  }

}

查詢出版日期是今年初到現在的書籍(now關鍵字代表現在時間)

{

  "query": {

    "range": {

      "publish_date": {

        "gte": "2017-01-01",

        "lte": "now"

      }

    }

  }

}

2.2.5.2 子條件查詢--Filter context

http方法: post

http地址: http://192.168.253.129:9200/book/novel/_search

關鍵詞: query(查詢關鍵詞), bool, filter

{

  "query": {

    "bool": {

      "filter": {

        "term": {

          "word_count": 1000

        }

      }

    }

  }

}

Filter context相對於query context, 用於數據過濾, es會對其查詢結果緩存, 查詢速率會更快一些, filter要結合bool一起使用.

 

2.2.5.3 復合條件查詢

以一定的邏輯組合子條件查詢

固定分數查詢

http方法: post

http地址: http://192.168.253.129:9200/_search (全文搜索)

關鍵詞: query(查詢關鍵詞), filter, boost關鍵詞, 固定分數

{

  "query": {

    "constant_score": {

      "filter": {

        "match": {

          "title": "elasticsearch"

        }

      },

      "boost": 2

    }

  }

}

固定了_score為2. 而在模糊查詢中, _score為變化的

 

布爾查詢

http方法: post

http地址: http://192.168.253.129:9200/_search (全文搜索)

關鍵詞: query(查詢關鍵詞), bool, should(應該滿足), must(必須滿足), must_not(一定不能滿足的條件)

{

  "query": {

    "bool": {

      "should": [

        {

          "match": {

            "author": "瓦力"

          }

        },

        {

          "match": {

            "title": "elasticsearch"

          }

        }

      ]

    }

  }

}

 

{

  "query": {

    "bool": {

      "must": [

        {

          "match": {

            "author": "瓦力"

          }

        },

        {

          "match": {

            "title": "elasticsearch"

          }

        }

      ]

    }

  }

}

 

Bool和filter混合使用

{

  "query": {

    "bool": {

      "must": [

        {

          "match": {

            "author": "瓦力"

          }

        },

        {

          "match": {

            "title": "elasticsearch"

          }

        }

      ],

      "filter": [

        {

          "term": {

            "word_count": 3000

          }

        }

      ]

    }

  }

}

 

Must_not的使用

{

  "query": {

    "bool": {

      "must_not": {

        "term": {

          "author": "瓦力"

        }

      }

    }

  }

}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM