aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--solr/conf/schema.xml25
-rw-r--r--solr/conf/solrconfig.xml2
-rw-r--r--src/client/documents/Documents.ts1
-rw-r--r--src/server/Search.ts28
-rw-r--r--src/server/index.ts55
5 files changed, 65 insertions, 46 deletions
diff --git a/solr/conf/schema.xml b/solr/conf/schema.xml
index 5e80b17d9..a568db14c 100644
--- a/solr/conf/schema.xml
+++ b/solr/conf/schema.xml
@@ -35,15 +35,26 @@
</analyzer>
</fieldType>
- <fieldType name="plong" class="solr.LongPointField" docValues="true"/>
+ <fieldType name="plong" class="solr.LongPointField"/>
<fieldType name="boolean" class="solr.BoolField" sortMissingLast="true"/>
- <fieldType name="pdate" class="solr.DatePointField" docValues="true"/>
- <fieldType name="pdouble" class="solr.DoublePointField" docValues="true"/>
+ <fieldType name="pdate" class="solr.DatePointField"/>
+ <fieldType name="pdaterange" class="solr.DateRangeField"/>
+ <fieldType name="pdouble" class="solr.DoublePointField"/>
- <field name="data" type="text" indexed="true" stored="true" uninvertible="false"/>
+ <field name="text" type="text" indexed="true" stored="false" uninvertible="false" multiValued="true"/>
<field name="id" type="string" indexed="true" stored="true" uninvertible="false" required="true"/>
- <field name="_version_" type="plong" indexed="false" stored="false"/>
+ <field name="_version_" type="plong" indexed="true" stored="true"/>
- <dynamicField name="*_t" type="string" indexed="true" stored="true"/>
- <dynamicField name="*_n" type="pdouble" indexed="true" stored="true"/>
+ <dynamicField name="*_t" type="text" indexed="true" stored="true" uninvertible="false" docValues="false"/>
+ <dynamicField name="*_n" type="pdouble" indexed="true" stored="true" uninvertible="false" docValues="false"/>
+ <dynamicField name="*_d" type="pdaterange" indexed="true" stored="true" uninvertible="false" docValues="false"/>
+ <dynamicField name="*_l" type="text" indexed="true" stored="true" uninvertible="false" docValues="false" multiValued="true"/>
+ <dynamicField name="*_i" type="string" indexed="true" stored="true" uninvertible="false" docValues="false"/>
+
+ <dynamicField name="*_a" type="text" indexed="true" stored="false" uninvertible="false" docValues="false"/>
+
+ <copyField source="*_t" dest="text"/>
+
+ <copyField source="*_t" dest="*_a"/>
+ <copyField source="*_n" dest="*_a"/>
</schema>
diff --git a/solr/conf/solrconfig.xml b/solr/conf/solrconfig.xml
index 981500022..90eff5363 100644
--- a/solr/conf/solrconfig.xml
+++ b/solr/conf/solrconfig.xml
@@ -696,7 +696,7 @@
<lst name="defaults">
<str name="echoParams">explicit</str>
<int name="rows">10</int>
- <str name="df">data</str>
+ <str name="df">text</str>
<!-- Default search field
<str name="df">text</str>
-->
diff --git a/src/client/documents/Documents.ts b/src/client/documents/Documents.ts
index a770ccc93..00233a989 100644
--- a/src/client/documents/Documents.ts
+++ b/src/client/documents/Documents.ts
@@ -175,6 +175,7 @@ export namespace Docs {
if (!("creationDate" in protoProps)) {
protoProps.creationDate = new DateField;
}
+ protoProps.isPrototype = true;
return SetDelegateOptions(SetInstanceOptions(proto, protoProps, data), delegateProps);
}
diff --git a/src/server/Search.ts b/src/server/Search.ts
index 6e7883bc9..59bdd4803 100644
--- a/src/server/Search.ts
+++ b/src/server/Search.ts
@@ -5,34 +5,8 @@ import { thisExpression } from 'babel-types';
export class Search {
public static Instance = new Search();
private url = 'http://localhost:8983/solr/';
- private client: any;
-
- constructor() {
- console.log("Search Instantiated!");
- var SolrNode = require('solr-node');
- this.client = new SolrNode({
- host: 'localhost',
- port: '8983',
- core: 'dash',
- protocol: 'http'
- });
- var strQuery = this.client.query().q('text:test');
-
- console.log(strQuery);
-
- // Search documents using strQuery
- // client.search(strQuery, (err: any, result: any) => {
- // if (err) {
- // console.log(err);
- // return;
- // }
- // console.log('Response:', result.response);
- // });
- }
-
public async updateDocument(document: any) {
- console.log("UPDATE: ", JSON.stringify(document));
return rp.post(this.url + "dash/update", {
headers: { 'content-type': 'application/json' },
body: JSON.stringify([document])
@@ -40,8 +14,6 @@ export class Search {
}
public async search(query: string) {
- console.log("____________________________");
- console.log(query);
const searchResults = JSON.parse(await rp.get(this.url + "dash/select", {
qs: {
q: query
diff --git a/src/server/index.ts b/src/server/index.ts
index 6b92e8e8e..93e4cafbf 100644
--- a/src/server/index.ts
+++ b/src/server/index.ts
@@ -128,7 +128,6 @@ app.get("/pull", (req, res) =>
app.get("/search", async (req, res) => {
let query = req.query.query || "hello";
let results = await Search.Instance.search(query);
- console.log(results);
res.send(results);
});
@@ -296,10 +295,48 @@ function GetRefFields([ids, callback]: [string[], (result?: Transferable[]) => v
}
-const suffixMap: { [type: string]: string } = {
+const suffixMap: { [type: string]: (string | [string, string | ((json: any) => any)]) } = {
"number": "_n",
- "string": "_t"
+ "string": "_t",
+ "image": ["_t", "url"],
+ "video": ["_t", "url"],
+ "pdf": ["_t", "url"],
+ "audio": ["_t", "url"],
+ "web": ["_t", "url"],
+ "date": ["_d", value => new Date(value.date).toISOString()],
+ "proxy": ["_i", "fieldId"],
+ "list": ["_l", list => {
+ const results = [];
+ for (const value of list.fields) {
+ const term = ToSearchTerm(value);
+ if (term) {
+ results.push(term.value);
+ }
+ }
+ return results.length ? results : null;
+ }]
};
+
+function ToSearchTerm(val: any): { suffix: string, value: any } | undefined {
+ const type = val.__type || typeof val;
+ let suffix = suffixMap[type];
+ if (!suffix) {
+ return;
+ }
+
+ if (Array.isArray(suffix)) {
+ const accessor = suffix[1];
+ if (typeof accessor === "function") {
+ val = accessor(val);
+ } else {
+ val = val[accessor];
+ }
+ suffix = suffix[0];
+ }
+
+ return { suffix, value: val }
+}
+
function UpdateField(socket: Socket, diff: Diff) {
Database.Instance.update(diff.id, diff.diff,
() => socket.broadcast.emit(MessageStore.UpdateField.Message, diff), false, "newDocuments");
@@ -308,28 +345,26 @@ function UpdateField(socket: Socket, diff: Diff) {
return;
}
const update: any = { id: diff.id };
- console.log("FIELD: ", docfield);
let dynfield = false;
for (let key in docfield) {
if (!key.startsWith("fields.")) continue;
- const val = docfield[key];
- const suffix = suffixMap[typeof val];
- if (suffix !== undefined) {
+ let val = docfield[key];
+ let term = ToSearchTerm(val);
+ if (term !== undefined) {
+ let { suffix, value } = term;
key = key.substring(7);
Object.values(suffixMap).forEach(suf => update[key + suf] = null);
- update[key + suffix] = { set: val };
+ update[key + suffix] = { set: value };
dynfield = true;
}
}
if (dynfield) {
- console.log("dynamic field detected!");
Search.Instance.updateDocument(update);
}
}
function CreateField(newValue: any) {
Database.Instance.insert(newValue, "newDocuments");
- console.log("created field");
}
server.listen(serverPort);