2013-03-16 2 views
0

Я пытаюсь найти эластичный поиск clojure API Elastisch.Clojure эластичный поиск API Elastisch не возвращает результаты или документы

Я следовал демо-код, приведенный в документации я получаю документ/индекс, созданный вывод для следующего кода

(defn demo-search-connect [] 
    (esr/connect! "http://127.0.0.1:9200") 
    (let [mapping-types {:person {:properties {:username {:type "string" :store "yes"} 
             :first-name {:type "string" :store "yes"} 
             :last-name {:type "string"} 
             :age  {:type "integer"} 
             :title  {:type "string" :analyzer 
              "snowball"} 
             :planet  {:type "string"} 
             :biography {:type "string" :analyzer "snowball" :term_vector "with_positions_offsets"}}}} 
    doc {:username "happyjoe" :first-name "Joe" :last-name "Smith" :age 30 :title "Teh Boss" :planet "Earth" :biography "N/A"}] 

(esi/create "myapp2_development" :mappings mapping-types) 
;; adds a document to the index, id is automatically generated by ElasticSearch 
;= {:ok true, :_index people, :_type person, :_id "2vr8sP-LTRWhSKOxyWOi_Q", :_version 1} 
(println (esd/create "myapp2_development" :person doc :settings {"number_of_shards" 1})) 
)) 

;Supposed to return an output for the search query 
(defn demo-search-index [] 
    (esr/connect! "http://127.0.0.1:9200") 
    (esd/search "myapp2_development" "person" :query {:term {:last_name "Smith"}}) 
) 

;Supposed to return the document with the given id 
(defn get-document [id] 
    (esr/connect! "http://127.0.0.1:9200") 
    (esd/get "myapp2_development" "person" id) 
) 

Я получаю выход для первой функции, как:

{:ok true, :_index myapp2_development, :_type :person, :_id GzNdzrqhQECQDlkSbq-GHA, :_version 1} 

На выходе я считаю, что документ правильно проиндексирован

Проблема в том, что вторая и третья функции возвращаются:

{:took 153, :timed_out false, :_shards {:total 5, :successful 5, :failed 0}, :hits {:total 0, :max_score nil, :hits []}} 

и nil соответственно.

Что мне здесь не хватает?

P.S: Я новичок в Clojure и упругого поиск

ответ

1

esd/get терпит неудачу, потому что ваш тип отображения :person не "person" (ключевое слово против строки).

Ваш код esd/search имеет ту же проблему, но кроме того, вы должны изменить last_name к last-name и нижним корпусом "Smith" к "smith" все должно работать.

+0

спасибо !!! Это решает. Интересно, почему демо-код в документации имел ключевое слово в виде строки? –

+1

Возможна ошибка с их стороны, или проблема с разными версиями ведет себя по-другому (я использую 1.0.2, и я мог бы повторить ваши проблемы). Они очень полезны в GitHub и в их списке рассылки (https://groups.google.com/forum/#!forum/clojure-elasticsearch), если вы хотите узнать больше. – ponzao

Смежные вопросы