Skip to content
Snippets Groups Projects
Unverified Commit 80e3f47e authored by Cal Herries's avatar Cal Herries Committed by GitHub
Browse files

Fix for #24132: Search returns irrelevant matches for non-native questions (#24133)

* Update search query to not match search string tokens with dataset_query column if the question is not native

* Add test

* Rewrite test

* Rename query-card -> mbql-card

* Use the correct dataset_query map
parent dd614a18
No related branches found
No related tags found
No related merge requests found
......@@ -183,19 +183,26 @@
(str "%" s "%"))
(defn- search-string-clause
[query searchable-columns]
[model query searchable-columns]
(when query
(into [:or]
(for [column searchable-columns
token (scoring/tokenize (scoring/normalize query))]
[:like
(hsql/call :lower column)
(wildcard-match token)]))))
(if (and (= model "card") (= column (hsql/qualify (model->alias model) :dataset_query)))
[:and
[:= (hsql/qualify (model->alias model) :query_type) "native"]
[:like
(hsql/call :lower column)
(wildcard-match token)]]
[:like
(hsql/call :lower column)
(wildcard-match token)])))))
(s/defn ^:private base-where-clause-for-model :- [(s/one (s/enum :and :=) "type") s/Any]
[model :- SearchableModel, {:keys [search-string archived?]} :- SearchContext]
(let [archived-clause (archived-where-clause model archived?)
search-clause (search-string-clause search-string
search-clause (search-string-clause model
search-string
(map (partial hsql/qualify (model->alias model))
(search-config/searchable-columns-for-model model)))]
(if search-clause
......
......@@ -596,3 +596,16 @@
(db/update! Pulse (:id pulse) :dashboard_id (:id dashboard))
(is (= nil
(search-for-pulses pulse))))))))))
(deftest card-dataset-query-test
(testing "Search results should match a native query's dataset_query column, but not an MBQL query's one."
;; https://github.com/metabase/metabase/issues/24132
(mt/with-temp* [Card [mbql-card {:name "Venues Count"
:query_type "query"
:dataset_query (mt/mbql-query venues {:aggregation [[:count]]})}]
Card [native-card {:name "Another SQL query"
:query_type "native"
:dataset_query (mt/native-query {:query "SELECT COUNT(1) AS aggregation FROM venues"})}]]
(is (= ["Another SQL query"]
(->> (search-request-data :rasta :q "aggregation")
(map :name)))))))
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment