Elasticsearch 구문

37536 단어 Elasticsearch

Elasticsearch 구문


elasticsearch 삭제 수정

1. 추가


1. 색인 만들기


색인 이름:test
PUT http://192.168.12.137:9200/test/
{
    "setting":{
        "number_of_shards":5,
        "number_of_replicas":1
    },
    "mappings":{
        "person":{
            "properties":{
                "name":{
                    "type":"text"
                },
                "age":{
                    "type":"integer"
                },
                "sex":{
                    "type":"string"
                },
                "birthday":{
                    "type":"date",
                    "format":"yyyy-MM-dd HH:mm:ss || yyyy-MM-dd || epoch_millis"
                },
                "introduce":{
                    "type":"text"
                }
            }
        }
    }
}

2. 문서 작성(ID 자동 생성)


문서person에 데이터 추가
POST http://192.168.12.137:9200/test/person/
{
    "name":"jieke",
    "age":20
}

3. 문서 만들기(id 설정)

POST http://192.168.12.137:9200/test/person/1
{
    "name":"pede",
    "age":20
}

2. 조회


a, 검색 인덱스 (test)

GET http://192.168.12.137:9201/test/_settings

b. 두 개의 인덱스 (test와robot) 를 동시에 가져옵니다.

GET http://192.168.12.137:9201/test,robot/_settings

c, 모든 인덱스 정보 조회

http://192.168.12.137:9201/_all/_settings

1. ID를 통한 문서 정보 조회

GET http://192.168.12.137:9200/test/person/1

2. 문서 정보 조회는name 속성을 통해

GET http://192.168.12.137:9200/test/person/_search?q=name:jieke

3、통과_소스 지정한 필드 가져오기


name 필드의 데이터만 조회합니다
GET http://192.168.12.137:9200/test/person/1?_source=name

4. 모든 데이터 조회

POST http://localhost:9200/test/_search
{
    "query":{
        "match_all":{}
    }
}

5. form size 페이지 조회

POST http://localhost:9200/test/_search
{
    "query":{
        "match_all":{}
    }
    "from":1,
    "size":2
}

6. 조회 및 정렬

#  
POST http://localhost:9200/test/_search
{
    "query":{
        "match":{
            "name":"lrshuai"
        }
    }
    "sort":[
        {"age":{"order":"desc"}}
    ]
}

7, 그룹 쿼리 그룹_by

#  
POST http://localhost:9200/test/_search
{
    "aggs":{
        "group_by_age":{
            "terms":{
                "field":"age"
            }
        },
        "group_by_name":{
            "terms":{
                "field":"name"
            }
        }
    }
}

# stats 
POST http://localhost:9200/test/_search
{
    "aggs":{
        "group_by_age":{
            "stats":{
                "field":"age"
            }
        },
    }
}

#  
POST http://localhost:9200/test/_search
{
    "aggs":{
        "group_by_age":{
            "min":{
                "field":"age"
            }
        },
    }
}

8. match 조회

#  name 
POST http://localhost:9200/test/_search
{
    "query":{
        "match":{
            "name":"lrshuai"
        }
    }
}


# match_phrase  , 
http://localhost:9200/test/_search
{
    "query":{
        "match_phrase":{
            "introduce":" "
        }
    }   
}

# slop  quick dog  。
#   50   100   slop  ,  ,  
http://localhost:9200/test/_search
{
   "query": {
      "match_phrase": {
         "title": {
            "query": "quick dog",
            "slop":  50 
         }
      }
   }
}

# multi_match  
POST http://localhost:9200/test/_search
{
    "query":{
        "multi_match":{
            "query":" ",
            "fields":["name","introduce"]
        }
    }   
}

9. 구문 조회

#  
http://localhost:9200/test/_search
{
    "query":{
        "query_string":{
            "query":"  or  "
        }
    }   
}

#  
POST http://localhost:9200/test/_search
{
    "query":{
        "query_string":{
            "query":"  or  ",
            "fields":["name","introduce"]
        }
    }   
}

#  
POST http://localhost:9200/test/_search
{
    "query":{
        "term":{
            "name":"lrshuai"
        }
    }   
}

10,rang 범위 조회


{
    "query":{
        "range":{
            "age":{
                "gte":20,
                "lte":25
            }
        }
    }   
}

POST http://localhost:9200/test/_search
{
    "query":{
     "range" : {
        "create_time" : {
            "gt" : "2017-01-01 00:00:00",
            "lt" : "2017-12-07 00:00:00"
        }
    }
    }
}

#  
POST http://localhost:9200/test/_search
{
    "query":{
     "range" : {
        "create_time" : {
            "gt" : "2017-01-01 00:00:00",
            "lt" : "2017-12-07 00:00:00||+1M"
        }
    }
    }
}

11. should 조회


그 중 하나를 만족시키면 돼요.
POST http://localhost:9200/test/_search
{
    "query":{
        "bool":{
            "should":[
                {
                    "match":{
                        "name":"tyro"
                    }   
                },{
                    "range":{
                        "age":{
                            "gt":20,
                            "lte":25
                        }
                    }
                }
            ]
        }
    }   
}

12. filter 조회

POST http://localhost:9200/test/_search
{
    "query":{
        "bool":{
            "filter":{
                "term":{
                    "name":"rstyro"
                }
            }
        }
    }   
}

13.must와 must_not

# must  
POST http://localhost:9200/test/_search
{
    "query":{
        "bool":{
            "must":[
                {
                    "match":{
                        "sex":" "
                    }   
                },
                {
                    "range":{
                        "age":{
                            "lte":30
                        }   
                    }
                }
            ]
        }
    }   
}
#  filter  
POST http://localhost:9200/test/_search
{
    "query":{
        "bool":{
            "must":[
                {
                    "match":{
                        "sex":" "
                    }   
                }
            ],
            "filter":[
                {
                    "term":{
                        "introduce":" "
                    }
                }
            ]
        }
    }   
}

# must_not  
POST http://localhost:9200/test/_search
{
    "query":{
        "bool":{
            "must_not":[
                {
                    "match":{
                        "sex":" "
                    }   
                },
                {
                    "range":{
                        "age":{
                            "lte":20
                        }   
                    }
                }
            ]
        }
    }   
}

14. 검색어 가중치 증가


콘텐츠 필드에는 full 、 text search 세 단어가 모두 포함되어야 합니다.content 필드에도 Elasticsearch 또는 Lucene 필드가 있는 경우 문서는 더 높은 평점_score을 받습니다.
{
    "query": {
        "bool": {
            "must": {
                "match": {
                    "content": { "query": "full text search", "operator": "and" } }
            },
            "should": [ 
                { "match": { "content": "Elasticsearch" }},
                { "match": { "content": "Lucene" }}
            ]
        }
    }
}

다시 수정:

GET /_search
{
    "query": {
        "bool": {
            "must": {
                "match": {  
                    "content": {
                        "query":    "full text search",
                        "operator": "and"
                    }
                }
            },
            "should": [
                { "match": {
                    "content": {
                        "query": "Elasticsearch",
                        "boost": 3 
                    }
                }},
                { "match": {
                    "content": {
                        "query": "Lucene",
                        "boost": 2 
                    }
                }}
            ]
        }
    }
}

위의 문장은 기본 boost 값 1을 사용합니다."query": "Elasticsearch", "boost": 3 이 문장은 가장 높은 boost값을 가지고 있기 때문에 더욱 중요하다."query": "Lucene","boost": 2 이 문장은 기본값을 사용하는 것보다 더 중요하지만, 그 중요성은 Elasticsearch 문장에 미치지 못한다.

또 다른 방법: boosting 조회

{
  "query": {
    "boosting": {
      "positive": {
        "match": {
          "content": "Elasticsearch" }
      },
      "negative": {
        "match": {
          "content": "Lucene" }
      },
      "negative_boost": 0.5
    }
  }
}

그것은positive와negative 조회를 받아들인다.positive 조회와 일치하는 문서만 나열되며, 네거티브 조회와 일치하는 문서는 문서의 원본을 통해 _score와 negative_boost 곱하기 방식의 강등 후의 결과.효과를 얻기 위해negative_boost의 값은 1.0보다 작아야 합니다.이 예제에서는 음방향 단어가 포함된 모든 문서 평점_스코어가 반감됩니다.

15、dis_max 조회


분리 최대화 조회


예를 들어 다음과 같은 두 가지 데이터가 있습니다.
PUT /my_index/my_type/1
{
    "title": "Quick brown rabbits",
    "body":  "Brown rabbits are commonly seen."
}

PUT /my_index/my_type/2
{
    "title": "Keeping pets healthy",
    "body":  "My quick brown fox eats rabbits on a regular basis."
}

우리는 조회를 진행한다
{
    "query": {
        "bool": {
            "should": [
                { "match": { "title": "Brown fox" }},
                { "match": { "body":  "Brown fox" }}
            ]
        }
    }
}

그러나 반환된 결과: 조회 결과는 문서 1의 점수가 더 높다는 것을 발견했습니다.
{
  "hits": [
     {
        "_id":      "1",
        "_score":   0.14809652,
        "_source": {
           "title": "Quick brown rabbits",
           "body":  "Brown rabbits are commonly seen."
        }
     },
     {
        "_id":      "2",
        "_score":   0.09256032,
        "_source": {
           "title": "Keeping pets healthy",
           "body":  "My quick brown fox eats rabbits on a regular basis."
        }
     }
  ]
}

이러한 원인을 이해하기 위해서는 볼이 어떻게 평점을 계산했는지 회상해야 한다.


1. should 문장의 두 개의 조회를 실행합니다.
2. 두 개의 조회 점수를 추가합니다.
3. 일치하는 문장의 총수를 곱한다.
4. 모든 문장의 총수를 나눈다(여기:2).
문서 1의 두 필드는 모두 브라운이라는 단어를 포함하기 때문에 두 match 문장이 성공적으로 일치하고 평점이 있습니다.문서 2의 바디 필드는brown과fox 두 단어를 동시에 포함하지만, 제목 필드는 어떤 단어도 포함하지 않습니다.이렇게 하면 바디 조회 결과의 높은 점수에 타이틀 조회의 0점을 더하고 2분의 1을 곱하면 문서 1보다 낮은 전체 평점을 얻는다.
이 예에서 타이틀과 바디 필드는 서로 경쟁하는 관계이기 때문에 가장 잘 일치하는 필드를 찾아야 한다.
각 필드의 채점 결과를 간단하게 합치지 않고 가장 일치하는 필드의 채점을 조회의 전체 채점으로 한다면 결과는 어떻게 될까요?이렇게 되돌아오는 결과는 브라운과 fox를 동시에 포함하는 단일 필드가 같은 단어가 반복되는 여러 개의 다른 필드보다 더 높은 관련성을 가진다는 것이다.
{
    "query": {
        "dis_max": {
            "queries": [
                { "match": { "title": "Brown fox" }},
                { "match": { "body":  "Brown fox" }}
            ]
        }
    }
}

분리 최대화 질의(Disjunction Max Query)는 질의와 일치하는 모든 문서를 결과로 반환하지만 가장 일치하는 평점만 질의의 평점 결과로 반환하는 것을 말합니다.

{
  "hits": [
     {
        "_id":      "2",
        "_score":   0.21509302,
        "_source": {
           "title": "Keeping pets healthy",
           "body":  "My quick brown fox eats rabbits on a regular basis."
        }
     },
     {
        "_id":      "1",
        "_score":   0.12713557,
        "_source": {
           "title": "Quick brown rabbits",
           "body":  "Brown rabbits are commonly seen."
        }
     }
  ]
}

16、multi_match 질의


multi_match 조회는 여러 필드에서 같은 조회를 반복적으로 실행할 수 있도록 편리한 방식을 제공했다


multi_match 다중 일치 조회의 유형은 여러 가지가 있는데 그 중 세 가지는 공교롭게도 우리의 데이터에 소개된 세 가지 장면에 대응한다. 즉:best_fields 、 most_fields 및 cross_fields(최적 필드, 다수 필드, 크로스 필드)
다음과 같은 간단한 데모:
bool 조회
{
  "query": {
    "bool": {
      "should": [
        { "match": { "street":    "Poland Street W1V" }},
        { "match": { "city":      "Poland Street W1V" }},
        { "match": { "country":   "Poland Street W1V" }},
        { "match": { "postcode":  "Poland Street W1V" }}
      ]
    }
  }
}

multi_로 바꾸기match 질의
{
  "query": {
    "multi_match": {
      "query":       "Poland Street W1V",
      "type":        "most_fields",
      "fields":      [ "street", "city", "country", "postcode" ]
    }
  }
}

3. 수정


1. 직접 수정


문서person id를 1로 수정하는name 속성은'잭'입니다.
POST http://192.168.12.137:9201/test/person/1/_update
{
    "doc":{
        "name":" "
    }
}

2. 스크립트 수정

POST http://192.168.12.137:9201/test/person/1/_update
{
    "script":{
        "lang":"painless",
        "inline":"ctx._source.age += 10"
    }
}

// 
POST http://192.168.12.137:9201/test/person/1/_update
{
    "script":{
        "lang":"painless",
        "inline":"ctx._source.age =params.age"
        "params":{
            "age":30
        }
    }
}

4. 삭제


1. 인덱스 삭제


test 인덱스 삭제
DELETE http://192.168.12.137:9201/test

2. 문서 삭제


id 1 데이터
DELETE http://192.168.12.137:9201/test/person/1

3. 기준을 통해 데이터 삭제

POST twitter/_delete_by_query
{
  "query": { 
    "match": {
      "message": "some message"
    }
  }
}

저는 5.6.4 버전입니다. 구체적으로 문서를 보십시오.
https://www.elastic.co/guide/en/elasticsearch/reference/5.6/docs-delete-by-query.html#docs-delete-by-query

4. 필드 삭제(field)


person 문서의field 필드 삭제
POST http://192.168.12.137:9201/test/person/_update
{
    "script":{
        "lang":"painless",
        "inline":"ctx._source.remove(\"field\")"
    }
}

5. 맵핑 매핑


색인을 만들 때 필드의 유형과 관련 속성을 미리 정의할 수 있습니다. 정적 맵과 동적 맵으로 나눌 수 있는 필드마다 추가할 수 있는 속성은 다음과 같습니다.
속성
설명
적용 유형
store
선택 가능한 값은: yes, no, yes로 설정하면 저장, no는 저장하지 않음
all
index
선택 사항: analyzed, not_analyzed, no, analyzed - 인덱스 및 분석, not_analyzed - 색인이지만 분석하지 않습니다. no 색인이라는 필드는 찾을 수 없습니다.기본값: analyzed
string, 다른 유형은 not_만 설정할 수 있습니다analyzed、no
null_value
필드가 비어 있으면 기본값을 설정할 수 있습니다. 예를 들어 "null_value": "NAN"
all
boost
필드의 가중치.기본값: 1.0
all
index_analyzer
색인을 설정할 때 사용하는 분석기
all
search_analyzer
검색에 사용할 분석기 설정
all
analyzer
색인과 검색에 사용할 분석기를 설정할 수 있습니다. 기본적으로standard 분석기를 사용합니다. 이외에 whitespace,simple,english 세 개의 내장된 분석기를 사용할 수 있습니다.
all
include_in_all
모든 필드가 기본적으로 검색됩니다. 어떤 필드가 검색되지 않으려면 이 필드를false로 설정하면 됩니다.기본값:true
all
index_name
필드의 이름을 정의합니다. 기본값은 필드 자체의 이름입니다.
all
norms
역할은 각종 규범화 요소에 따라 권한 값을 계산하는 것이다. 이렇게 하면 조회가 편리하다.analyzed 정의 필드에서 값은true,not-analyzed는false이다.
all

1. 색인 생성 및 매핑 구성

PUT http://192.168.12.137:9201/person
{
    "setting":{
        "number_of_shards":5,
        "number_of_replicas":1
    },
    "mappings":{
        "man":{
            "properties":{
                "name":{
                    "type":"string",
                    "index":"not_analyzed"
                },
                "age":{
                    "type":"integer"
                },
                "sex":{
                    "type":"string"
                },
                "money":{
                    "type":"double"
                }
            }
        }
    }
}

2. 매핑 보기

GET http://192.168.12.137:9201/person/_mapping

3. 매핑 제거

DELETE http://192.168.12.137:9201/person/man/_mapping

참고 문헌:https://www.elastic.co/guide/cn/elasticsearch/guide/current/index.html

좋은 웹페이지 즐겨찾기