|
49 | 49 | (println "bulking") |
50 | 50 | (core/extract! {})) |
51 | 51 |
|
52 | | - ; tests with generated database |
| 52 | + (defn >> [a] (prn a) a) |
| 53 | + |
| 54 | + ; fulltext search with generated database |
53 | 55 | (let [conn (d/get-conn "target/docs-db" |
54 | 56 | datalevin/db-schemas) |
55 | 57 |
|
56 | 58 | db (d/db conn) |
57 | 59 |
|
58 | | - result (doall (d/q '[:find (pull ?e [* {:namespace/project [*]}]) ?a ?v |
59 | | - :in $ ?q |
60 | | - :where |
61 | | - [(fulltext $ ?q {:domains ["definition-name"]}) [[?e ?a ?v]]]] |
62 | | - db |
63 | | - "associative"))] |
| 60 | + datoms (->> (d/fulltext-datoms db |
| 61 | + "ass" |
| 62 | + {:top 30 |
| 63 | + :domains ["definition-name" |
| 64 | + "namespace-name" |
| 65 | + "project-name"]}) |
| 66 | + (map first) |
| 67 | + (d/pull-many db '[:definition/id |
| 68 | + :definition/name |
| 69 | + :definition/doc |
| 70 | + :namespace/id |
| 71 | + :namespace/name |
| 72 | + :namespace/doc |
| 73 | + :project/id |
| 74 | + :project/artifact |
| 75 | + :project/group]))] |
64 | 76 | (d/close conn) |
| 77 | + datoms) |
| 78 | + |
| 79 | +; fulltext raw search with generated database |
| 80 | + (let [lmdb (d/open-kv "target/docs-db") |
| 81 | + engine (d/new-search-engine lmdb {:query-analyzer (su/create-analyzer |
| 82 | + {:tokenizer (su/create-regexp-tokenizer #"[\s:/\.;,!=?\"'()\[\]{}|<>&@#^*\\~`\-]+") |
| 83 | + :token-filters [su/lower-case-token-filter]}) |
| 84 | + :include-text? true |
| 85 | + :domain "definition-name"}) |
| 86 | + result (doall (d/search engine "a" {:top 30}))] |
| 87 | + (d/close-kv lmdb) |
65 | 88 | result) |
66 | 89 |
|
67 | 90 | ; simple query definition by name |
|
108 | 131 | ; tests with fulltext search |
109 | 132 | (let [conn (d/get-conn "target/docs-db" datalevin/db-schemas) |
110 | 133 | db (d/db conn) |
111 | | - result (doall (d/q '[:find ?e ?name ?a ?v |
| 134 | + result (doall (d/q '[:find ?e ?name ?a ?v ?b ?d |
112 | 135 | :in $ ?q |
113 | 136 | :where |
114 | | - [(fulltext $ ?q) [[?e ?a ?v]]] |
| 137 | + [(fulltext $ ?q) [[?e ?a ?v ?b ?d]]] |
115 | 138 | [?e :definition/name ?name]] |
116 | 139 | db |
117 | 140 | "assoc"))] |
118 | 141 | (d/close conn) |
119 | 142 | result) |
120 | 143 |
|
121 | 144 | ; tests with fulltext and analyzer |
122 | | - (let [analyzer (su/create-analyzer |
| 145 | + (let [query-analyzer (su/create-analyzer |
| 146 | + {:tokenizer (su/create-regexp-tokenizer #"[\s:/\.;,!=?\"'()\[\]{}|<>&@#^*\\~`\-]+") |
| 147 | + :token-filters [su/lower-case-token-filter]}) |
| 148 | + |
| 149 | + analyzer (su/create-analyzer |
123 | 150 | {:tokenizer (su/create-regexp-tokenizer #"[\s:/\.;,!=?\"'()\[\]{}|<>&@#^*\\~`\-]+") |
124 | 151 | :token-filters [su/lower-case-token-filter |
125 | 152 | su/prefix-token-filter]}) |
|
129 | 156 | {:text {:db/valueType :db.type/string |
130 | 157 | :db/fulltext true |
131 | 158 | :db.fulltext/domains ["txt"]}} |
132 | | - {:search-domains {"txt" {:analyzer analyzer}}}) |
| 159 | + {:search-domains {"txt" {:analyzer analyzer |
| 160 | + :query-analyzer query-analyzer}}}) |
133 | 161 |
|
134 | | - data [{:text "assoc!"} |
| 162 | + data [{:text "a"} |
| 163 | + {:text "abs"} |
| 164 | + {:text "assoc!"} |
135 | 165 | {:text "assoc"} |
136 | 166 | {:text "assoc-in"} |
137 | 167 | {:text "assoc-dom"} |
138 | 168 | {:text "assoc-meta"} |
139 | | - {:text "associative?"}] |
| 169 | + {:text "associative?"} |
| 170 | + {:text "b"} |
| 171 | + {:text "ba"} |
| 172 | + {:text "bas"}] |
140 | 173 |
|
141 | 174 | _transact (d/transact! conn data) |
142 | 175 |
|
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")] |
| 176 | + result (->> (d/q '[:find ?i |
| 177 | + :in $ ?q |
| 178 | + :where |
| 179 | + [(fulltext $ ?q {:top 20}) [[?e]]] |
| 180 | + [?e :text ?i]] |
| 181 | + (d/db conn) |
| 182 | + "assoc-me") |
| 183 | + doall)] |
148 | 184 |
|
149 | 185 | (d/close conn) |
150 | 186 | (util/delete-files dir) |
151 | 187 |
|
152 | | - result)) |
| 188 | + result) |
153 | 189 |
|
| 190 | +; tests with fulltext and analyzer on a raw query |
| 191 | + (let [query-analyzer (su/create-analyzer |
| 192 | + {:tokenizer (su/create-regexp-tokenizer #"[\s:/\.;,!=?\"'()\[\]{}|<>&@#^*\\~`\-]+") |
| 193 | + :token-filters [su/lower-case-token-filter]}) |
154 | 194 |
|
| 195 | + analyzer (su/create-analyzer |
| 196 | + {:tokenizer (su/create-regexp-tokenizer #"[\s:/\.;,!=?\"'()\[\]{}|<>&@#^*\\~`\-]+") |
| 197 | + :token-filters [su/lower-case-token-filter |
| 198 | + su/prefix-token-filter]}) |
| 199 | + |
| 200 | + lmdb (d/open-kv "/tmp/mydb") |
| 201 | + |
| 202 | + engine (d/new-search-engine lmdb {:query-analyzer query-analyzer |
| 203 | + :analyzer analyzer |
| 204 | + :include-text? true |
| 205 | + :domain "definition-name"}) |
| 206 | + input {0 "a" |
| 207 | + 1 "abs" |
| 208 | + 2 "assoc!" |
| 209 | + 3 "assoc" |
| 210 | + 4 "assoc-in" |
| 211 | + 5 "assoc-dom" |
| 212 | + 6 "assoc-meta" |
| 213 | + 7 "associative?" |
| 214 | + 8 "b" |
| 215 | + 9 "ba" |
| 216 | + 10 "bas"} |
| 217 | + |
| 218 | + _transact (doseq [[k v] input] |
| 219 | + (d/add-doc engine k v)) |
| 220 | + |
| 221 | + result (doall (d/search engine "assoc-m" {:top 20 :display :texts}))] |
| 222 | + |
| 223 | + (d/close-kv lmdb) |
| 224 | + |
| 225 | + result)) |
0 commit comments