aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/client/util/SearchUtil.ts20
-rw-r--r--src/server/ApiManagers/SearchManager.ts19
2 files changed, 24 insertions, 15 deletions
diff --git a/src/client/util/SearchUtil.ts b/src/client/util/SearchUtil.ts
index 84470f073..6657ab19c 100644
--- a/src/client/util/SearchUtil.ts
+++ b/src/client/util/SearchUtil.ts
@@ -42,9 +42,9 @@ export namespace SearchUtil {
let replacedQuery = query.replace(/type_t:([^ )])/g, (substring, arg) => `{!join from=id to=proto_i}*:* AND ${arg}`);
if (options.onlyAliases) {
const header = query.match(/_[atnb]?:/) ? replacedQuery : "DEFAULT:" + replacedQuery;
- replacedQuery = `({!join from=id to=proto_i}*) AND ${header}`;
+ replacedQuery = `{!join from=id to=proto_i}* AND ${header}`;
}
- console.log("Q: " + replacedQuery);
+ console.log("Q: " + replacedQuery);
const gotten = await rp.get(rpquery, { qs: { ...options, q: replacedQuery } });
const result: IdSearchResult = gotten.startsWith("<") ? { ids: [], docs: [], numFound: 0, lines: [] } : JSON.parse(gotten);
if (!returnDocs) {
@@ -60,12 +60,14 @@ export namespace SearchUtil {
const fileids = txtresult ? txtresult.ids : [];
const newIds: string[] = [];
const newLines: string[][] = [];
- await Promise.all(fileids.map(async (tr: string, i: number) => {
- const docQuery = "fileUpload_t:" + tr.substr(0, 7); //If we just have a filter query, search for * as the query
- const docResult = JSON.parse(await rp.get(Utils.prepend("/dashsearch"), { qs: { ...options, q: docQuery } }));
- newIds.push(...docResult.ids);
- newLines.push(...docResult.ids.map((dr: any) => txtresult.lines[i]));
- }));
+ if (fileids) {
+ await Promise.all(fileids.map(async (tr: string, i: number) => {
+ const docQuery = "fileUpload_t:" + tr.substr(0, 7); //If we just have a filter query, search for * as the query
+ const docResult = JSON.parse(await rp.get(Utils.prepend("/dashsearch"), { qs: { ...options, q: docQuery } }));
+ newIds.push(...docResult.ids);
+ newLines.push(...docResult.ids.map((dr: any) => txtresult.lines[i]));
+ }));
+ }
const theDocs: Doc[] = [];
@@ -92,7 +94,7 @@ export namespace SearchUtil {
}
}
- return { docs: theDocs, numFound: result.numFound, highlighting, lines: theLines };
+ return { docs: theDocs, numFound: Math.max(0, result.numFound), highlighting, lines: theLines };
}
export async function GetAliasesOfDocument(doc: Doc): Promise<Doc[]>;
diff --git a/src/server/ApiManagers/SearchManager.ts b/src/server/ApiManagers/SearchManager.ts
index a52430ee8..531f3706c 100644
--- a/src/server/ApiManagers/SearchManager.ts
+++ b/src/server/ApiManagers/SearchManager.ts
@@ -47,13 +47,20 @@ export class SearchManager extends ApiManager {
const resObj: { ids: string[], numFound: number, lines: string[] } = { ids: [], numFound: 0, lines: [] };
let results: any;
const dir = pathToDirectory(Directory.text);
- results = await findInFiles.find({ 'term': q, 'flags': 'ig' }, dir, ".txt$");
- for (const result in results) {
- resObj.ids.push(path.basename(result, ".txt").replace(/upload_/, ""));
- resObj.lines.push(results[result].line);
- resObj.numFound++;
+ try {
+ const regex = new RegExp(q.toString());
+ results = await findInFiles.find({ 'term': q, 'flags': 'ig' }, dir, ".txt$");
+ for (const result in results) {
+ resObj.ids.push(path.basename(result, ".txt").replace(/upload_/, ""));
+ resObj.lines.push(results[result].line);
+ resObj.numFound++;
+ }
+ res.send(resObj);
+ } catch (e) {
+ console.log("textsearch: received bad RegExp" + q.toString())
+ res.send([]);
+ return;
}
- res.send(resObj);
}
});