|
1 | 1 | (ns dev.playground |
2 | 2 | (:require [clj-http.client :as http] |
3 | 3 | [clojure.java.io :as io] |
| 4 | + [clojure.string :as str] |
4 | 5 | [codes.clj.docs.extractor.core :as core] |
5 | 6 | [codes.clj.docs.extractor.datalevin :as datalevin] |
6 | 7 | [datalevin.core :as d] |
7 | | - [datalevin.util :as util]) |
| 8 | + [datalevin.util :as util] |
| 9 | + [datalevin.search-utils :as su]) |
8 | 10 | (:import [java.io File])) |
9 | 11 |
|
10 | 12 | (defn get-url [git-url] |
|
49 | 51 | (core/extract! {})) |
50 | 52 |
|
51 | 53 | ; tests with generated database |
52 | | - (let [conn (d/get-conn "target/docs-db" datalevin/db-schemas) |
| 54 | + (let [conn (d/get-conn "target/docs-db" |
| 55 | + datalevin/db-schemas) |
| 56 | + |
53 | 57 | db (d/db conn) |
| 58 | + |
54 | 59 | result (doall (d/q '[:find (pull ?e [* {:namespace/project [*]}]) ?a ?v |
55 | 60 | :in $ ?q |
56 | 61 | :where |
57 | | - [(fulltext $ ?q {:domains ["definition"]}) [[?e ?a ?v]]]] |
| 62 | + [(fulltext $ ?q {:domains ["definition-name"]}) [[?e ?a ?v]]]] |
58 | 63 | db |
59 | | - "assoc"))] |
| 64 | + "associative"))] |
60 | 65 | (d/close conn) |
61 | 66 | result) |
62 | 67 |
|
|
73 | 78 | result) |
74 | 79 |
|
75 | 80 | ; regex searching |
76 | | - (let [conn (d/get-conn "target/docs-db" datalevin/db-schemas) |
| 81 | + (let [conn (d/get-conn "target/docs-db" |
| 82 | + datalevin/db-schemas) |
77 | 83 | db (d/db conn) |
78 | | - result (doall (->> (d/q '[:find [(pull ?e [:definition/id |
79 | | - :definition/name |
80 | | - :definition/doc |
81 | | - :definition/group |
82 | | - :definition/artifact |
83 | | - :definition/git-source |
84 | | - {:definition/namespace [:namespace/name]}]) ...] |
| 84 | + result (doall (->> (d/q '[:find [(pull ?e [*]) ...] |
85 | 85 | :in $ ?q |
86 | 86 | :where |
87 | | - [(str ?q ".*") ?pattern] |
| 87 | + [(str ".*" ?q ".*") ?pattern] |
88 | 88 | [(re-pattern ?pattern) ?regex] |
89 | 89 | [(re-matches ?regex ?name)] |
90 | | - [?e :definition/name ?name] |
91 | | - [?e :definition/private false] |
92 | | - (not [?e :definition/defined-by "cljs.core/defprotocol"])] |
| 90 | + [?e :definition/name ?name]] |
93 | 91 | db |
94 | | - "def") |
| 92 | + "pending") |
95 | 93 | (sort-by (juxt |
96 | 94 | :definition/id |
97 | 95 | :definition/name))))] |
|
119 | 117 | db |
120 | 118 | "assoc"))] |
121 | 119 | (d/close conn) |
| 120 | + result) |
| 121 | + |
| 122 | + ; tests with fulltext and analyzer |
| 123 | + (let [analyzer (su/create-analyzer |
| 124 | + {:tokenizer (su/create-regexp-tokenizer #"[\s:/\.;,!=?\"'()\[\]{}|<>&@#^*\\~`\-]+") |
| 125 | + :token-filters [su/lower-case-token-filter |
| 126 | + su/prefix-token-filter]}) |
| 127 | + |
| 128 | + dir "/tmp/mydb" |
| 129 | + conn (d/create-conn dir |
| 130 | + {:text {:db/valueType :db.type/string |
| 131 | + :db/fulltext true |
| 132 | + :db.fulltext/domains ["txt"]}} |
| 133 | + {:search-domains {"txt" {:analyzer analyzer}}}) |
| 134 | + |
| 135 | + data [{:text "assoc!"} |
| 136 | + {:text "assoc"} |
| 137 | + {:text "assoc-in"} |
| 138 | + {:text "assoc-dom"} |
| 139 | + {:text "assoc-meta"} |
| 140 | + {:text "associative?"}] |
| 141 | + |
| 142 | + _transact (d/transact! conn data) |
| 143 | + |
| 144 | + result (d/q '[:find ?e ?a ?v |
| 145 | + :in $ ?q |
| 146 | + :where [(fulltext $ ?q {:domains ["txt"]}) [[?e ?a ?v]]]] |
| 147 | + (d/db conn) |
| 148 | + "a")] |
| 149 | + |
| 150 | + (d/close conn) |
| 151 | + (util/delete-files dir) |
| 152 | + |
122 | 153 | result)) |
| 154 | + |
| 155 | + |
0 commit comments