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