Elastic Search에 JSON 파일 가져오기/인덱스화
Elastic Search는 처음이라 지금까지 수동으로 데이터를 입력해 왔습니다.예를 들어 다음과 같은 작업을 수행했습니다.
$ curl -XPUT 'http://localhost:9200/twitter/tweet/1' -d '{
"user" : "kimchy",
"post_date" : "2009-11-15T14:12:12",
"message" : "trying out Elastic Search"
}'
이제 .json 파일이 있는데 이것을 Elastic Search로 인덱싱하고 싶습니다.나도 이런 시도를 해봤지만 성공하지 못했다.
curl -XPOST 'http://jfblouvmlxecs01:9200/test/test/1' -d lane.json
.json 파일을 Import하려면 어떻게 해야 하나요?매핑이 올바른지 확인하기 위해 먼저 수행해야 할 절차가 있습니까?
컬이 있는 파일을 사용하는 올바른 명령어는 다음과 같습니다.
curl -XPOST 'http://jfblouvmlxecs01:9200/test/_doc/1' -d @lane.json
Elastic Search는 스키마가 없으므로 매핑이 필요하지 않습니다.json을 그대로 전송하고 기본 매핑을 사용하면 모든 필드가 표준 분석기를 사용하여 인덱싱되고 분석됩니다.
명령줄에서 Elastic Search와 상호 작용하려는 경우, 컬보다 조금 더 손쉬운 Elastichell을 볼 수 있습니다.
2019-07-10 : 커스텀 맵핑 타입은 사용되지 않으므로 주의하시기 바랍니다.위의 URL의 타입을 업데이트하여 어느 것이 인덱스인지, 어느 것이 test인지 알기 쉽게 했습니다.
최신 문서에 따르면 https://www.elastic.co/guide/en/elasticsearch/reference/current/docs-bulk.html:
컬링할 텍스트 파일 입력을 제공하는 경우 일반 -d 대신 --data-binary 플래그를 사용해야 합니다.후자는 새로운 라인을 보존하지 않습니다.
예:
$ curl -s -XPOST localhost:9200/_bulk --data-binary @requests
이러한 종류의 툴은, https://github.com/taskrabbit/elasticsearch-dump 에서 작성했습니다.
JSON 파일에는 "순수한" JSON 파일의 각 행에 대해 다음 행이 속하는 인덱스를 지정하는 한 줄이 있어야 합니다.
예.
{"index":{"_index":"shakespeare","_type":"act","_id":0}}
{"line_id":1,"play_name":"Henry IV","speech_number":"","line_number":"","speaker":"","text_entry":"ACT I"}
그게 없으면 아무 것도 효과가 없고, 왜 그런지는 말해주지 않을 거야
저는 elasticsearch_loader의 저자입니다.
저는 이 문제로 ESL을 작성했습니다.
pip으로 다운로드할 수 있습니다.
pip install elasticsearch-loader
그런 다음 다음과 같이 발행하여 json 파일을 Elastic Search에 로드할 수 있습니다.
elasticsearch_loader --index incidents --type incident json file1.json file2.json
json 파일과 같은 디렉토리에 있는 것을 확인하고, 이것을 실행했을 뿐입니다.
curl -s -H "Content-Type: application/json" -XPOST localhost:9200/product/default/_bulk?pretty --data-binary @product.json
같은 디렉토리에 있는 것을 확인하고, 이 방법으로 실행합니다.주의: 명령어의 product/default/는 환경에 고유한 것입니다.생략하거나 자신과 관련된 것으로 대체할 수 있습니다.
KenH의 답변에 추가
$ curl -s -XPOST localhost:9200/_bulk --data-binary @requests
할 수 요.@requests
@complete_path_to_json_file
★★★★★★@
경로보다 중요합니다.
/test/test/1/_priety?pretty 명령어를 사용하여 https://www.getpostman.com/docs/environments에서 우편배달원을 구하기만 하면 파일 위치를 알 수 있습니다.
사용하고 있습니다.
$ curl -s -XPOST localhost:9200/_bulk --data-binary @requests
'requests'가 json 파일인 경우 이 파일을 로 변경해야 합니다.
$ curl -s -XPOST localhost:9200/_bulk --data-binary @requests.json
그 전에 json 파일이 인덱싱되지 않은 경우 json 파일 내의 각 행 앞에 인덱스 행을 삽입해야 합니다.JQ로 할 수 있어요.다음 링크를 참조하십시오.http://kevinmarsh.com/2014/10/23/using-jq-to-import-json-into-elasticsearch.html
Elastic Search 튜토리얼(셰익스피어 튜토리얼 예)로 이동하여 사용된 json 파일 샘플을 다운로드하여 확인하십시오.각 json 객체(각 개별 선) 앞에는 인덱스 선이 있습니다.이것은 jq 명령어를 사용한 후에 필요한 것입니다.벌크 API를 사용하려면 이 형식이 필수입니다. 플레인 json 파일은 작동하지 않습니다.
Elasticsearch 7.7에서는 다음 내용 유형도 지정해야 합니다.
curl -s -H "Content-Type: application/json" -XPOST localhost:9200/_bulk --data-binary @<absolute path to JSON file>
Filesystem API를 통해 Elastic Search API를 노출하기 위한 코드를 작성했습니다.
예를 들어 데이터의 명확한 내보내기/가져오기에는 좋은 방법입니다.
내가 탄성 드라이버 시제품을 만들었어.FUSE를 기반으로 합니다.
Elastic Search 7.7 이상 버전을 사용하는 경우 다음 명령을 따르십시오.
curl -H "Content-Type: application/json" -XPOST "localhost:9200/bank/_bulk? pretty&refresh" --data-binary @"/Users/waseem.khan/waseem/elastic/account.json"
는 " " " 입니다.
/Users/waseem.khan/waseem/elastic/account.json
.탄력적 검색 6.x 버전을 사용하는 경우 다음 명령을 사용할 수 있습니다.
curl -X POST localhost:9200/bank/_bulk?pretty&refresh --data-binary @"/Users/waseem.khan/waseem/elastic/account.json" -H 'Content-Type: application/json'
주의: 마지막 .json 파일에서 빈 행을 하나 추가했는지 확인하십시오.그렇지 않으면 예외보다 낮게 표시됩니다.
"error" : {
"root_cause" : [
{
"type" : "illegal_argument_exception",
"reason" : "The bulk request must be terminated by a newline [\n]"
}
],
"type" : "illegal_argument_exception",
"reason" : "The bulk request must be terminated by a newline [\n]"
},
`enter code here`"status" : 400
Virtual Box와 UBUNTU를 사용하고 있거나 단순히 UBUNTU를 사용하고 있는 경우에는 편리합니다.
wget https://github.com/andrewvc/ee-datasets/archive/master.zip
sudo apt-get install unzip (only if unzip module is not installed)
unzip master.zip
cd ee-datasets
java -jar elastic-loader.jar http://localhost:9200 datasets/movie_db.eloader
Elastic Search로 json 파일을 Import하여 인덱스를 작성하려면 이 Python 스크립트를 사용합니다.
import json
from elasticsearch import Elasticsearch
es = Elasticsearch([{'host': 'localhost', 'port': 9200}])
i = 0
with open('el_dharan.json') as raw_data:
json_docs = json.load(raw_data)
for json_doc in json_docs:
i = i + 1
es.index(index='ind_dharan', doc_type='doc_dharan', id=i, body=json.dumps(json_doc))
언급URL : https://stackoverflow.com/questions/15936616/import-index-a-json-file-into-elasticsearch
'source' 카테고리의 다른 글
뉴턴소프트 사용법Asp.net Core Web API에서 Json을 기본값으로 설정하시겠습니까? (0) | 2023.04.06 |
---|---|
IIS 서버 web.config 파일의 위치 (0) | 2023.04.06 |
새 속성 값을 사용하여 프로그래밍 방식으로 WooCommerce 제품 변형을 생성합니다. (0) | 2023.04.06 |
유레카와 쿠베르네테스 (0) | 2023.04.01 |
MongoDB {aggregation $match} 대 {find} 속도 (0) | 2023.04.01 |