mapping 操作
指定mapping, 建立一個index
PUT /test_user2
{
"settings": {
"number_of_shards": 1,
"number_of_replicas": 1
},
"mappings": {
"properties": {
"name":{
"type":"keyword"
}
}
}
}
複製程式碼
我們系統執行一段時間後, 想增加一個地址的欄位, 如何手動指定型別呢?
在已有index mapping中新增新型別
PUT /test_user2/_mapping
{
"properties": {
"address":{
"type":"text",
"index": false //禁止被檢索
}
}
}
複製程式碼
index 模版建立
//設定模版-型別推斷為int
PUT /_template/template_1
{
"index_patterns": ["user*"],
"order":1,
"settings": {
"number_of_shards": 1,
"number_of_replicas": 1
},
"mappings": {
"numeric_detection": true
}
}
//獲取模版資訊
GET /_template/template_1
複製程式碼
mapping dynamic 屬性
在mapping中我們還可以設定 dynamic 屬性
dynamic 可以分為動態對映(dynamic mapping)和靜態(顯式)對映(explicit mapping)和精確(嚴格)對映(strict mappings),具體由dynamic屬性控制。
-
動態對映(dynamic:true) 自動建立自動索引
-
靜態對映(dynamic:false)可以存進去 但不能檢索
-
嚴格模式(dynamic:false)如果遇到新的欄位,就丟擲異常
聚合統計分析
GET /test_users/_search
{
"size": 0,
"aggs": {
"age_agg":{
"terms": {
"field": "age",
"size": 10
},
"aggs": {
"constom_a":{
"sum": {
"field": "age"
}
}
}
}
}
}
複製程式碼
上面首先根據age進行分組, 在組內對age進行求和.
分詞檢測
檢測分詞情況
GET /_analyze
{
"analyzer": "standard",
"text":"Waiting to Exhale (1995)"
}
//檢視test_users索引的name欄位怎樣分詞, 預設為standard
GET /test_users/_analyze
{
"field":"name",
"text":"hello world 中國"
}
複製程式碼
更新
//建立一個document, 如果存在則更新(不推薦)
POST /test_users/create/1
{
"name":"xiaoyu",
"age": 22,
"address":"河北保定"
}
//只能新增, 否則報錯
POST /test_users/_doc/3?op_type=create
{
"name":"wansan",
"age": 33,
"address":"河北保定"
}
//建立或更新(推薦)
PUT /test_users/_doc/2
{
"name":"linlin",
"age": 22,
"address":"河北保定"
}
//更新-覆蓋掉舊資料
PUT /test_users/_doc/2
{
"sex":"女"
}
//將sex加入到原文件中(只更新指定的欄位)
POST /test_users/_update/2
{
"doc":{
"sex":"女"
}
}
複製程式碼
查詢
url 模糊查詢
//查詢欄位中包含關鍵詞的資料
GET /test_users/_search?q=河北
//查詢_id=1的資料
GET test_users/_doc/1
複製程式碼
dsl方式查詢
模糊查詢Waiting 和 Exhale
GET xiaoyu_movie/_search
{
"query": {
"match": {
"column2": "Waiting Exhale",
}
}
}
複製程式碼
但是這不是我們想要的結果, 我們想同時包含這兩個單詞
當然你會想到拆分多條件查詢
GET xiaoyu_movie/_search
{
"query": {
"bool": {
"must": [
{
"match":{
"column2": "Waiting"
}
},
{
"match":{
"column2": "Exhale"
}
}
]
}
}
}
複製程式碼
這裡我們使用一種更簡便的方式
GET xiaoyu_movie/_search
{
"profile": "true",
"explain": true, //開啟查詢分析
"query": {
"match": {
"column2":{
"query": "Waiting Exhale",
"operator": "AND"
}
}
}
}
複製程式碼
或者使用
GET xiaoyu_movie/_search
{
"profile": "true",
"explain": true,
"query": {
"match": {
"column2":{
"query": "Waiting Exhale",
"minimum_should_match": 2
}
}
}
}
複製程式碼
優化 (使用 constant_score filter 遮蔽評分):
GET xiaoyu_movie/_search
{
"query": {
"constant_score": {
"filter": {
"match": {
"column2": {
"query": "Waiting Exhale",
"minimum_should_match": 2
}
}
}
}
}
}
複製程式碼
如果想要提升某個子句的排序權重, 可以設定 boost
GET /xiaoyu_movie/_search
{
"query": {
"match": {
"column2":{
"query": "a",
"boost": 2
}
}
}
}
複製程式碼
如果想對某個條件提升或降低權重, 可以使用boost, 預設為1.
OR 查詢
GET /xiaoyu_movie/_search
{
"query": {
"bool": {
"should": [
{
"term": {
"column1": {
"value": "2376"
}
}
},
{
"term": {
"column1": {
"value": "1"
}
}
}
],
"minimum_should_match": 1 //預設為1,表示最少滿足一個條件
}
}
}
複製程式碼
多欄位相同查詢, 匹配度20%
GET /xiaoyu_movie/_search
{
"query": {
"multi_match": {
"query": "a b c",
"fields": ["column1","column2"],
"minimum_should_match": "20%"
}
}
}
複製程式碼