我正在尝试通过[Elastisch教程]在VM上运行的ElasticSearch实例中创建一些测试数据。
我正在运行此代码:
(ns content-rendering.core
(:require [clojurewerkz.elastisch.native :as esr]
[clojurewerkz.elastisch.native.index :as esi]))
(defn populate-test-data
[]
(let [conn (esr/connect "http://10.10.10.101:9200")]
(esi/create conn "test")))
(populate-test-data)
当我尝试使用emacs中的Cider或从Leiningen repl执行 namespace 中的代码时,看到以下异常:
Caused by java.lang.UnsupportedOperationException
nth not supported on this type: Character
RT.java: 933 clojure.lang.RT/nthFrom
RT.java: 883 clojure.lang.RT/nth
native.clj: 266 clojurewerkz.elastisch.native/connect
core.clj: 7 content-rendering.core/populate-test-data
core.clj: 10 content-rendering.core/eval5078
如果我需要将Elastisch namespace 放入一个repl并运行类似以下内容的程序,则可以正常工作:
(def conn (esr/connect "http://10.10.10.101:9200"))
(esi/create conn "test") ; {:acknowledged true}
有什么想法我在这里想念的吗?
最佳答案
elastisch中有两个客户端,REST客户端和本机客户端。您正在使用本机传输,但是当它需要一系列[host port]
对时,将其传递给REST URL。
您可以通过将esr
/ esi
更改为其clojurewerkz.elastisch.rest
挂件来切换到REST客户端,或者将本机指向正确的端点:
(esr/connect [["10.10.10.101" 9300]])
如果您的集群名称不是默认名称,则必须使用其他选项映射进行设置:
(esr/connect [["10.10.10.101" 9300]] {"cluster.name" "my-es"})