“此类型不支持”设置Elastisch连接的例外情况

时间:2016-01-07 08:51:21

标签: elasticsearch clojure elastisch

我正在尝试通过[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执行命名空间中的代码时,我看到以下异常:

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名称空间转换为repl并运行如下所示的内容,它可以正常工作:

(def conn (esr/connect "http://10.10.10.101:9200"))
(esi/create conn "test")  ; {:acknowledged true}

我在这里缺少什么想法?

1 个答案:

答案 0 :(得分:1)

在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"})