집합 작업 오류: 기본적으로 텍스트 필드에서 Fielddata를 비활성화합니다.Set fielddata=true
환경
elasticsearch:5.4.3 가상 머신:centos7 kibana:5.4.3 운영체제:win7
개요
이 편 은 개인 학습 노트 에 속하며, 튜토리얼 을 하지 않는다
색인
데이터를 elasticsearch
에 저장하는 행위를
라고 한다.
색인이라는 단어가 Elasticsearch 언어 환경에 얼마나 많은 의미를 포함하는지 알아차렸을 수도 있으므로 다음과 같은 설명을 할 필요가 있다.
색인(명사):
앞에서 말한 바와 같이 색인은 전통적인 관계 데이터베이스 중의 데이터베이스와 유사하고 관계형 문서를 저장하는 곳이다.인덱스 (index) 의 복수어는 인덱스 또는 인덱스입니다.
색인 (동사):
색인 문서는 검색하고 조회할 수 있도록 색인 (명사) 에 문서를 저장하는 것입니다.이것은 SQL 문장의 INSERT 키워드와 매우 유사합니다. 문서가 이미 존재할 때 새 문서가 이전 문서를 대체하는 경우를 제외하고는.
역렬 인덱스:
관계형 데이터베이스는 데이터 검색 속도를 높이기 위해 B 트리(B-tree)와 같은 색인을 지정한 열에 추가합니다.Elasticsearch와 Lucene는 같은 목적을 달성하기 위해 역렬 인덱스라는 구조를 사용했다.+
기본적으로 문서의 모든 속성은 인덱스 (역렬 인덱스) 와 검색 가능합니다.역렬 인덱스가 없는 속성은 검색할 수 없습니다.우리는 역렬 인덱스에서 역렬 인덱스의 더 많은 세부 사항을 토론할 것이다.
구문 검색
단어 검색은 정확하게 일치하는 것이다.GET megacorp/employee/_search
{
"query": {
"match_phrase": {
"about": "rock climbing"
}
}
}
이 편 은 개인 학습 노트 에 속하며, 튜토리얼 을 하지 않는다
색인
데이터를 elasticsearch
에 저장하는 행위를
라고 한다.
색인이라는 단어가 Elasticsearch 언어 환경에 얼마나 많은 의미를 포함하는지 알아차렸을 수도 있으므로 다음과 같은 설명을 할 필요가 있다.
색인(명사):
앞에서 말한 바와 같이 색인은 전통적인 관계 데이터베이스 중의 데이터베이스와 유사하고 관계형 문서를 저장하는 곳이다.인덱스 (index) 의 복수어는 인덱스 또는 인덱스입니다.
색인 (동사):
색인 문서는 검색하고 조회할 수 있도록 색인 (명사) 에 문서를 저장하는 것입니다.이것은 SQL 문장의 INSERT 키워드와 매우 유사합니다. 문서가 이미 존재할 때 새 문서가 이전 문서를 대체하는 경우를 제외하고는.
역렬 인덱스:
관계형 데이터베이스는 데이터 검색 속도를 높이기 위해 B 트리(B-tree)와 같은 색인을 지정한 열에 추가합니다.Elasticsearch와 Lucene는 같은 목적을 달성하기 위해 역렬 인덱스라는 구조를 사용했다.+
기본적으로 문서의 모든 속성은 인덱스 (역렬 인덱스) 와 검색 가능합니다.역렬 인덱스가 없는 속성은 검색할 수 없습니다.우리는 역렬 인덱스에서 역렬 인덱스의 더 많은 세부 사항을 토론할 것이다.
구문 검색
단어 검색은 정확하게 일치하는 것이다.GET megacorp/employee/_search
{
"query": {
"match_phrase": {
"about": "rock climbing"
}
}
}
단어 검색은 정확하게 일치하는 것이다.
GET megacorp/employee/_search
{
"query": {
"match_phrase": {
"about": "rock climbing"
}
}
}
여기에는
match_phrase
필터를 사용하여 정확하게 일치하는 필드 about
가 rock climbing
인 문서가 있습니다.fielddata
이것fielddata
은 홈페이지Mapping
장절에 있습니다.번역:
기본적으로 대부분의 필드는 검색할 수 있도록 인덱스되어 있습니다.그러나 스크립트에서 정렬, 집합, 접근 필드의 값은 서로 다른 검색 접근 패턴이 필요합니다.
검색에 필요한 질문은 “ ?”
, 정렬과 집합에 필요한 질문은 “ ?”
대부분의 필드는 index-time
, 디스크의 doc_values
를 사용하여 이 데이터의 접근 모드에 사용할 수 있다.그러나 text
필드는 지원되지 않습니다doc_values
.
대체적으로 text
필드는 fielddata
라는 데이터 구조를 사용하는데 이 데이터 구조는 조회할 때 메모리 데이터 구조를 의미한다.이 데이터 구조는 집합, 정렬, 스크립트에 사용되는 필드에 수요에 따라 처음으로 구축된 것이다.디스크의 각 세그먼트에서 전체 역렬 인덱스를 읽어서 구축된 역렬
관계는 jvm
더미에 저장된 메모리에 저장된다.
text 필드는 기본적으로 열려 있지 않습니다.
fielddata
는 대량의 공간을 소모하는데, 특히 높은 기수text
필드를 불러올 때.일단 fielddata
더미에 싣게 되면, 그것은 단락의 생명 주기 안에 유지될 것이다.그 밖에 로드 fielddata
는 비싼 과정으로 사용자가 지연 명중을 겪게 할 수 있다.이것이 바로 묵인이 금지된 이유다.text
필드에서 정렬, 집합, 스크립트에서 접근 값을 시도하면 이 이상을 볼 수 있습니다.
Fielddata is disabled on text fields by default. Set fielddata=true on [your_field_name] in order to load fielddata in memory by uninverting the inverted index. Note that this can however use significant memory.
fielddata를 사용하기 전에
fielddata
를 시작하기 전에 text
필드를 집합, 정렬, 스크립트에 왜 사용하는지 생각해 보세요.이렇게 해서 통과하는 것은 무의미하다.
색인을 하기 전에 텍스트 필드를 분석하여 검색 new
이나 york
을 통해 검색 new york
할 수 있도록 해야 합니다.new york
값 (통) 을 원할 때, 이 필드의 집합 작업 terms
은 new
값 (통:bucket) 과 york
값 (통:bucket) 을 되돌려줍니다.
설명: bucket
은 elasticsearch
집합 작업을 수행하여 반환한 결과 값입니다.사실은 수조야.예:GET megacorp/employee/_search
{
"aggs": {
"all_int": {
"terms": {"field": "interests"},//terms
"aggs": {
"avg_age": {
"avg": {
"field": "age"
}
}
}
}
}
}
GET megacorp/employee/_search
{
"aggs": {
"all_int": {
"terms": {"field": "interests"},//terms
"aggs": {
"avg_age": {
"avg": {
"field": "age"
}
}
}
}
}
}
효과는 다음과 같습니다.
"aggregations": {
"all_int": {
"doc_count_error_upper_bound": 0,
"sum_other_doc_count": 0,
"buckets": [//buckets
{
"key": "music",
"doc_count": 2,
"avg_age": {
"value": 28.5
}
},
{
"key": "forestry",
"doc_count": 1,
"avg_age": {
"value": 35
}
},
{
"key": "sports",
"doc_count": 1,
"avg_age": {
"value": 25
}
}
]
}
}
반대로 전체 텍스트 검색에 사용할 텍스트 필드와 분석되지 않은 키워드 필드
doc_values
를 사용해야 합니다.다음과 같습니다.PUT my_index
{
"mappings": {
"my_type": {
"properties": {
"my_field": { ①
"type": "text",
"fields": {
"keyword": { ②
"type": "keyword"
}
}
}
}
}
}
}
①:
my_field
필드를 사용하여 검색합니다.②: 집합, 정렬 및 스크립트에서 사용할 필드my_field.keyword
를 사용합니다.텍스트 필드에fielddata 사용하기
다음과 같이 기존
text
필드에서 PUT mapping API
활성화 fielddata
를 사용할 수 있습니다.PUT my_index/_mapping/my_type
{
"properties": {
"my_field": { ①
"type": "text",
"fielddata": true
}
}
}
①: 당신이 지정한 맵은 기존의 필드맵과
my_field
매개 변수로 구성되어야 합니다.참고:
fielddata
매개 변수 설정은 같은 색인에서 같은 필드 이름을 일치시켜야 합니다.그는 fielddata.*
을 사용하여 기존 값을 업데이트할 수 있다.홈페이지 튜토리얼에서 오픈
PUT mapping API
방법:이 코드의 목적은 검색할 수 있을 뿐만 아니라 집합할 수 있도록 하기 위해서이다.
PUT megacorp/_mapping/employee
{
"properties": {
"interests":{
"type": "text",
"fields": {
"keyword":{
"type": "keyword"
}
}
}
}
}
켜기
fielddata
:PUT megacorp/_mapping/employee
{
"properties": {
"interests":{
"type": "text",
"fielddata": true
}
}
}
PUT와 POST의 차이점
여기에는 단지 작은 차이점을 말할 뿐이다.
문서를 삽입할 때 지정fielddata
이 없으면 해당 _id
가 자동으로 생성됩니다 elasticsearch
.POST website/blog
{
"title": "My third blog entry",
"text": "Third still trying this out...",
"date": "2017/07/05"
}
POST website/blog
{
"title": "My third blog entry",
"text": "Third still trying this out...",
"date": "2017/07/05"
}
결과:
{
"_index": "website",
"_type": "blog",
"_id": "AV0Qv0wO-S86jJ72I7lo",// id
"_version": 1,
"result": "created",
"_shards": {
"total": 2,
"successful": 2,
"failed": 0
},
"created": true
}
post
를 사용하고 지정되지 않은 경우put
:PUT website/blog
{
"title": "My third blog entry",
"text": "Third still trying this out...",
"date": "2017/07/05"
}
오류 보고:
No handler found for uri [/website/blog] and method [PUT]
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.