You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@allura.apache.org by br...@apache.org on 2018/03/30 17:16:16 UTC

allura git commit: [#8197] better matching on site admin searches

Repository: allura
Updated Branches:
  refs/heads/db/8197 [created] c1fe8e7e3


[#8197] better matching on site admin searches


Project: http://git-wip-us.apache.org/repos/asf/allura/repo
Commit: http://git-wip-us.apache.org/repos/asf/allura/commit/c1fe8e7e
Tree: http://git-wip-us.apache.org/repos/asf/allura/tree/c1fe8e7e
Diff: http://git-wip-us.apache.org/repos/asf/allura/diff/c1fe8e7e

Branch: refs/heads/db/8197
Commit: c1fe8e7e33740967a3d4d4e3b6df4bf33944db68
Parents: 78fefa8
Author: Dave Brondsema <da...@brondsema.net>
Authored: Fri Mar 30 13:16:11 2018 -0400
Committer: Dave Brondsema <da...@brondsema.net>
Committed: Fri Mar 30 13:16:11 2018 -0400

----------------------------------------------------------------------
 Allura/allura/lib/search.py                    | 7 ++++++-
 Allura/allura/templates/site_admin_search.html | 1 +
 Allura/allura/tests/unit/test_solr.py          | 4 ++--
 3 files changed, 9 insertions(+), 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/allura/blob/c1fe8e7e/Allura/allura/lib/search.py
----------------------------------------------------------------------
diff --git a/Allura/allura/lib/search.py b/Allura/allura/lib/search.py
index 1cf26c2..736b42b 100644
--- a/Allura/allura/lib/search.py
+++ b/Allura/allura/lib/search.py
@@ -194,7 +194,12 @@ def site_admin_search(model, q, field, **kw):
         q = obj.translate_query(q, fields)
     else:
         # construct query for a specific selected field
-        q = obj.translate_query(u'%s:%s' % (field, q), fields)
+        # use parens to group all the parts of the query with the field
+        # escaping spaces with '\ ' isn't sufficient for display_name_t since its stored as text_general (why??)
+        # and wouldn't handle foo@bar.com split on @ either
+        # This should work, but doesn't for unknown reasons: q = u'{!term f=%s}%s' % (field, q)
+        q = obj.translate_query(u'%s:(%s)' % (field, q), fields)
+        kw['q.op'] = 'AND'  # so that all terms within the () are required
     fq = [u'type_s:%s' % model.type_s]
     return search(q, fq=fq, ignore_errors=False, **kw)
 

http://git-wip-us.apache.org/repos/asf/allura/blob/c1fe8e7e/Allura/allura/templates/site_admin_search.html
----------------------------------------------------------------------
diff --git a/Allura/allura/templates/site_admin_search.html b/Allura/allura/templates/site_admin_search.html
index c43982d..d7d11eb 100644
--- a/Allura/allura/templates/site_admin_search.html
+++ b/Allura/allura/templates/site_admin_search.html
@@ -31,6 +31,7 @@
 
   <div class="grid-23">
     {{ c.search_form.display(q=q, f=f) }}
+    <p>Use quotes for an exact literal match, or <code>*</code> for wildcard.  E.g. <code>"john doe"</code> or <code>test*</code></p>
   </div>
 
   {% if objects %}

http://git-wip-us.apache.org/repos/asf/allura/blob/c1fe8e7e/Allura/allura/tests/unit/test_solr.py
----------------------------------------------------------------------
diff --git a/Allura/allura/tests/unit/test_solr.py b/Allura/allura/tests/unit/test_solr.py
index 3d5317c..af59ae9 100644
--- a/Allura/allura/tests/unit/test_solr.py
+++ b/Allura/allura/tests/unit/test_solr.py
@@ -98,7 +98,7 @@ class TestSolr(unittest.TestCase):
         fq = ['type_s:Project']
         site_admin_search(Project, 'test', 'shortname', rows=25)
         search.assert_called_once_with(
-            'shortname_s:test', fq=fq, ignore_errors=False, rows=25)
+            'shortname_s:(test)', fq=fq, ignore_errors=False, rows=25, **{'q.op': 'AND'})
 
         search.reset_mock()
         site_admin_search(Project, 'shortname:test || shortname:test2', '__custom__')
@@ -109,7 +109,7 @@ class TestSolr(unittest.TestCase):
         search.reset_mock()
         site_admin_search(User, 'test-user', 'username', rows=25)
         search.assert_called_once_with(
-            'username_s:test-user', fq=fq, ignore_errors=False, rows=25)
+            'username_s:(test-user)', fq=fq, ignore_errors=False, rows=25, **{'q.op': 'AND'})
 
         search.reset_mock()
         site_admin_search(User, 'username:admin1 || username:root', '__custom__')