monger.search is gone

Full text search in 3.0 is supported via regular queries
with the $text operator.
This commit is contained in:
Michael Klishin 2015-05-16 15:38:41 +03:00
parent a8d42a62f5
commit 6ca5b9d4ba
4 changed files with 7 additions and 66 deletions

View file

@ -81,7 +81,3 @@
(defn top
[^MongoClient conn]
(monger.core/command (monger.core/admin-db conn) {:top 1}))
(defn search
[^DB db ^String collection query]
(monger.core/command db {"text" collection "search" query}))

View file

@ -259,3 +259,6 @@
;; full text search
(defoperator $text)
(defoperator $search)
(defoperator $language)
(defoperator $natural)

View file

@ -1,46 +0,0 @@
;; Copyright (c) 2011-2014 Michael S. Klishin
;;
;; The use and distribution terms for this software are covered by the
;; Eclipse Public License 1.0 (http://opensource.org/licenses/eclipse-1.0.php)
;; which can be found in the file epl-v10.html at the root of this distribution.
;; By using this software in any fashion, you are agreeing to be bound by
;; the terms of this license.
;; You must not remove this notice, or any other, from this software.
(ns monger.search
"Full text search queries support (MongoDB 2.4+)"
(:require [monger.command :as cmd]
[monger.conversion :as cnv])
(:import [com.mongodb DB CommandResult BasicDBList DBObject]))
;;
;; Implementation
;;
(defn- convert-hit
[^DBObject dbo keywordize-keys?]
(cnv/from-db-object dbo keywordize-keys?))
;;
;; API
;;
(defn search
"Performs a full text search query"
[^DB db ^String collection query]
(cmd/search db collection query))
(defn results-from
"Returns a lazy sequence of results from a search query response, sorted by score.
Each result is a Clojure map with two keys: :score and :obj."
([^CommandResult res]
(results-from res true))
([^CommandResult res keywordize-keys?]
(let [sorter (if keywordize-keys?
:score
(fn [m]
(get m "score")))]
(sort-by sorter >
(map #(convert-hit % keywordize-keys?) ^BasicDBList (.get res "results"))))))

View file

@ -1,8 +1,8 @@
(ns monger.test.full-text-search-test
(:require [monger.core :as mg]
[monger.collection :as mc]
[monger.search :as ms]
[monger.command :as cmd]
[monger.operators :refer :all]
[clojure.test :refer [deftest is use-fixtures]]
[monger.result :refer [acknowledged?]])
(:import com.mongodb.BasicDBObjectBuilder))
@ -11,16 +11,6 @@
db (mg/get-db conn "monger-test")
coll "search-docs"]
(defn enable-search
[f]
;; {:textSearchEnabled true :setParameter 1}
(let [bldr (doto (BasicDBObjectBuilder.)
(.append "setParameter" 1)
(.append "textSearchEnabled" true))
cmd (.get bldr)]
(is (acknowledged? (cmd/raw-admin-command conn cmd))))
(f))
(defn purge-collections
[f]
(mc/purge-many db [coll])
@ -28,13 +18,11 @@
(mc/purge-many db [coll]))
(use-fixtures :each purge-collections)
(use-fixtures :once enable-search)
(deftest ^{:search true} test-basic-full-text-search-query
(mc/ensure-index db coll (array-map :subject "text" :content "text"))
(mc/insert db coll {:subject "hello there" :content "this should be searchable"})
(mc/insert db coll {:subject "untitled" :content "this is just noize"})
(let [res (ms/search db coll "hello")
xs (ms/results-from res)]
(is (= "hello there" (-> xs first :obj :subject)))
(is (= 1.0 (-> xs first :score))))))
(let [xs (mc/find-maps db coll {$text {$search "hello"}})]
(is (= 1 (count xs)))
(is (= "hello there" (-> xs first :subject))))))