source

Elastic Search에 JSON 파일 가져오기/인덱스화

manycodes 2023. 4. 6. 21:47
반응형

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

반응형