Commit 9e6f9ad24a58e3ebd631771c67980f60fb768ca5

Authored by Neil Blakey-Milner
1 parent 4726e87f

Use IN BOOLEAN MODE for the search, allowing us to overcome some issues

on low document volumes for searching.


git-svn-id: https://kt-dms.svn.sourceforge.net/svnroot/kt-dms/trunk@3282 c91229c3-7414-0410-bfa2-8a42b809f60b
presentation/lookAndFeel/knowledgeTree/search/standardSearchUI.inc
@@ -36,14 +36,16 @@ function getMessage() { @@ -36,14 +36,16 @@ function getMessage() {
36 function getSearchResultsByCategory($iFolderID, $sKeywords, $iStartIndex, $sCategory) { 36 function getSearchResultsByCategory($iFolderID, $sKeywords, $iStartIndex, $sCategory) {
37 global $default; 37 global $default;
38 38
39 - /*ok*/ $sQuery = "SELECT DISTINCT '" . "$default->graphicsUrl/widgets/dfolder.gif" . "' AS folder_image_url, F.id AS folder_id, D.id AS document_id, D.name AS document_name, ROUND(MATCH(DT.document_text) AGAINST (?),3) AS score " . 39 + /*ok*/ $sQuery = "SELECT DISTINCT '" . "$default->graphicsUrl/widgets/dfolder.gif" . "' AS folder_image_url, " .
  40 + "F.id AS folder_id, D.id AS document_id, D.name AS document_name, " .
  41 + "ROUND(MATCH(DT.document_text) AGAINST (? IN BOOLEAN MODE) OR 1, 3) AS score " .
40 "FROM $default->documents_table AS D INNER JOIN $default->document_text_table AS DT ON D.id = DT.document_id " . 42 "FROM $default->documents_table AS D INNER JOIN $default->document_text_table AS DT ON D.id = DT.document_id " .
41 "INNER JOIN $default->document_fields_link_table AS DFL ON DT.document_id=DFL.document_id " . 43 "INNER JOIN $default->document_fields_link_table AS DFL ON DT.document_id=DFL.document_id " .
42 "INNER JOIN $default->document_fields_table AS DF ON DF.id = DFL.document_field_id " . 44 "INNER JOIN $default->document_fields_table AS DF ON DF.id = DFL.document_field_id " .
43 "INNER JOIN $default->status_table AS SL ON D.status_id = SL.id " . 45 "INNER JOIN $default->status_table AS SL ON D.status_id = SL.id " .
44 "INNER JOIN $default->folders_table AS F on F.ID = D.folder_id " . 46 "INNER JOIN $default->folders_table AS F on F.ID = D.folder_id " .
45 "INNER JOIN $default->search_permissions_table AS SDUL ON SDUL.document_id = D.id " . 47 "INNER JOIN $default->search_permissions_table AS SDUL ON SDUL.document_id = D.id " .
46 - "WHERE MATCH(DT.document_text) AGAINST (?) " . 48 + "WHERE MATCH(DT.document_text) AGAINST (? IN BOOLEAN MODE) " .
47 "AND (F.is_public OR SDUL.user_id = ?) " . 49 "AND (F.is_public OR SDUL.user_id = ?) " .
48 "AND SL.name='Live' "; 50 "AND SL.name='Live' ";
49 $aParams = array($sKeywords, $sKeywords, $_SESSION["userID"]); 51 $aParams = array($sKeywords, $sKeywords, $_SESSION["userID"]);
@@ -75,12 +77,14 @@ function getSearchResultsByCategory($iFolderID, $sKeywords, $iStartIndex, $sCate @@ -75,12 +77,14 @@ function getSearchResultsByCategory($iFolderID, $sKeywords, $iStartIndex, $sCate
75 77
76 function getSearchResultsByDocumentType($iFolderID, $sKeywords, $iStartIndex, $iDocTypeID) { 78 function getSearchResultsByDocumentType($iFolderID, $sKeywords, $iStartIndex, $iDocTypeID) {
77 global $default; 79 global $default;
78 - /*ok*/ $sQuery = "SELECT DISTINCT '" . "$default->graphicsUrl/widgets/dfolder.gif" . "' AS folder_image_url, F.id AS folder_id, D.id AS document_id, D.name AS document_name, ROUND(MATCH(DT.document_text) AGAINST (?),3) AS score " . 80 + /*ok*/ $sQuery = "SELECT DISTINCT '" . "$default->graphicsUrl/widgets/dfolder.gif" . "' AS folder_image_url, " .
  81 + "F.id AS folder_id, D.id AS document_id, D.name AS document_name, " .
  82 + "ROUND(MATCH(DT.document_text) AGAINST (? IN BOOLEAN MODE),3) AS score " .
79 "FROM $default->documents_table AS D INNER JOIN $default->document_text_table AS DT ON D.id = DT.document_id " . 83 "FROM $default->documents_table AS D INNER JOIN $default->document_text_table AS DT ON D.id = DT.document_id " .
80 "INNER JOIN $default->status_table AS SL ON D.status_id = SL.id " . 84 "INNER JOIN $default->status_table AS SL ON D.status_id = SL.id " .
81 "INNER JOIN $default->folders_table AS F on F.ID = D.folder_id " . 85 "INNER JOIN $default->folders_table AS F on F.ID = D.folder_id " .
82 "INNER JOIN $default->search_permissions_table AS SDUL ON SDUL.document_id = D.id " . 86 "INNER JOIN $default->search_permissions_table AS SDUL ON SDUL.document_id = D.id " .
83 - "WHERE MATCH(DT.document_text) AGAINST (?) " . 87 + "WHERE MATCH(DT.document_text) AGAINST (? IN BOOLEAN MODE) " .
84 "AND (F.is_public OR SDUL.user_id = ?) "; 88 "AND (F.is_public OR SDUL.user_id = ?) ";
85 $aParams = array($sKeywords, $sKeywords, $_SESSION["userID"]); 89 $aParams = array($sKeywords, $sKeywords, $_SESSION["userID"]);
86 if (isset($iDocTypeID)) { 90 if (isset($iDocTypeID)) {
@@ -112,12 +116,14 @@ function getSearchResultsByDocumentType($iFolderID, $sKeywords, $iStartIndex, $i @@ -112,12 +116,14 @@ function getSearchResultsByDocumentType($iFolderID, $sKeywords, $iStartIndex, $i
112 116
113 function getSeachResultsByFolder($iFolderID, $iStartIndex, $sKeywords) { 117 function getSeachResultsByFolder($iFolderID, $iStartIndex, $sKeywords) {
114 global $default; 118 global $default;
115 - /*ok*/ $sQuery = "SELECT DISTINCT '" . "$default->graphicsUrl/widgets/dfolder.gif" . "' AS folder_image_url, F.id AS folder_id, D.id AS document_id, D.name AS document_name, ROUND(MATCH(DT.document_text) AGAINST (?),3) AS score " . 119 + /*ok*/ $sQuery = "SELECT DISTINCT '" . "$default->graphicsUrl/widgets/dfolder.gif" . "' AS folder_image_url, " .
  120 + "F.id AS folder_id, D.id AS document_id, D.name AS document_name, " .
  121 + "ROUND(MATCH(DT.document_text) AGAINST (? IN BOOLEAN MODE),3) AS score " .
116 "FROM $default->documents_table AS D INNER JOIN $default->document_text_table AS DT ON D.id = DT.document_id " . 122 "FROM $default->documents_table AS D INNER JOIN $default->document_text_table AS DT ON D.id = DT.document_id " .
117 "INNER JOIN $default->status_table AS SL ON D.status_id = SL.id " . 123 "INNER JOIN $default->status_table AS SL ON D.status_id = SL.id " .
118 "INNER JOIN $default->folders_table AS F on F.ID = D.folder_id " . 124 "INNER JOIN $default->folders_table AS F on F.ID = D.folder_id " .
119 "INNER JOIN $default->search_permissions_table AS SDUL ON SDUL.document_id = D.id " . 125 "INNER JOIN $default->search_permissions_table AS SDUL ON SDUL.document_id = D.id " .
120 - "WHERE MATCH(DT.document_text) AGAINST (?) " . 126 + "WHERE MATCH(DT.document_text) AGAINST (? IN BOOLEAN MODE) " .
121 "AND (F.is_public OR SDUL.user_id = ?) " . 127 "AND (F.is_public OR SDUL.user_id = ?) " .
122 "AND SL.name='Live' "; 128 "AND SL.name='Live' ";
123 $aParams = array($sKeywords, $sKeywords, $_SESSION["userID"]); 129 $aParams = array($sKeywords, $sKeywords, $_SESSION["userID"]);