Elasticsearch API를 emacs buffer에서 호출

Elastic stack AdventCalendar 19일입니다.

Kibana의 DevTools에서 쿼리를 실행하는 것과 동일한 것을 emacs에서 실행하는 이야기입니다.

소개



elastic emacs라는 키워드로 구글 검색을 하면 상위에 Classmethod 씨의 인터뷰 기사가 나옵니다.

Elastic의 사람들에게 물어 보았습니다 (개발 팀 편)

이 가운데 개발 환경에 대해서는 이렇게 많습니다.

CM 「개발 툴에는 어떤 것을 이용하고 있습니까?」
Ryan씨 「에디터는 IntelliJ, Eclipse를 이용하고 있는 멤버가 많다. 그 중에는 Emacs 사용도 있다. Emacs 사용은 개발 뿐만이 아니라, 메일등의 업무도 모두 Emacs로 해내고 있다(웃음)」

emacs로 메일을 읽고 쓰는 나는 매우 친근감을 느낍니다 (웃음).

한화휴제



Elastic Stack은 오픈 소스 프로젝트이므로 github에서 소스 코드를 게시합니다.

시험에 elastic/elasticsearch 를 보면(자), 맨 위의 디렉토리에 .dir-locals.el 라는 파일이 있어, emacs 의 java-mode 의 커스터마이즈가 설정되어 있습니다. 어쩌면 인터뷰에서 화제가 되고 있던 쪽이, 이 파일의 주인 것이 아닌가와 마음대로 상상하고 있습니다. dakrone 님의 리포지토리에는 elasticsearch를 emacs에서 조작하는 es-mode가 공개되어 있습니다. (고맙습니다 ~)

본편



전치가 길었지만 본편은 짧습니다.

An Emacs major mode for interacting with Elasticsearch

이 es-mode를 emacs에 추가하면 Kibana의 Dev Tools에서 쿼리를 작성하고 실행하도록 emacs buffer에서 RestAPI를 실행할 수 있습니다.

이런 식으로 ↓ Elasticsearch 쿼리를 파일에 열거하고 실행하려는 쿼리 위에 커서를 놓고 거기에서 Ctrl-c를 두 번 누르면 결과 json이 다른 buffer에 표시됩니다.



Kibana의 DevTools에 비해 어떤 이점이 있습니까? 라고 자문 자답해 보면,

쿼리를 파일에 저장해두면 DevTools에 복사하지 않고도 즉시 실행할 수 있고 편집기 안에서 완결되어 있다는 것일까요?

org-mode



또한 emacs에는 org-mode라는 고유 한 markdown 메커니즘 (모드)이 있습니다. es-mode가 설정된 상태에서 org-mode 내에서 쿼리를 실행하면 같은 파일의 RESULTS라는 블록이 생성되어 거기에 결과를 반환합니다.

검색 쿼리와 그 결과를 기록해 두고 싶은 경우는 org-mode 안에서 es-mode 를 사용하는 편이 편리할 것입니다.



↑의 gif에도 나와 있습니다만, json 의 결과를 jq 로 처리한 것을 RESULTS 로 취득할 수도 있습니다.
#+BEGIN_SRC es :jq ._source.title
GET demo/doc/1?pretty
#+END_SRC
#+RESULTS
: "hello elastic"

es-mode 설정 정보



공식 README 을 참조하십시오.

그럼에도 불구하고 emacs 버전이나 환경에 따라 잘 설정되지 않을 수 있습니다. 시험으로 es-mode 사용하기 위한 Dockerfile 를 만들어 보았습니다. 컨테이너 속에서 움직이고 있는 emacs이므로, 이하의 2점에 주의해 주세요.
  • endpoint 는 http://localhost:9200 이 되어 있으면 변경해야 합니다. endpoint는 .emacs 파일에서 지정할 수 있습니다.
  • Elasticsearch는 루프백 이외의 네트워크에서도 연결되어야 합니다.
  • 좋은 웹페이지 즐겨찾기