wip
This commit is contained in:
parent
4636768810
commit
67afe968b4
5 changed files with 85 additions and 19 deletions
|
@ -35,29 +35,16 @@
|
|||
"bio": {
|
||||
"type": "string",
|
||||
"index": "analyzed",
|
||||
"analyzer": "kuromoji"
|
||||
"analyzer": "bigram"
|
||||
}
|
||||
}
|
||||
},
|
||||
"post": {
|
||||
"note": {
|
||||
"properties": {
|
||||
"text": {
|
||||
"type": "string",
|
||||
"index": "analyzed",
|
||||
"analyzer": "kuromoji"
|
||||
}
|
||||
}
|
||||
},
|
||||
"drive_file": {
|
||||
"properties": {
|
||||
"name": {
|
||||
"type": "string",
|
||||
"index": "analyzed",
|
||||
"analyzer": "kuromoji"
|
||||
},
|
||||
"user": {
|
||||
"type": "string",
|
||||
"index": "not_analyzed"
|
||||
"analyzer": "bigram"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -34,7 +34,6 @@ export type Source = {
|
|||
pass: string;
|
||||
};
|
||||
elasticsearch: {
|
||||
enable: boolean;
|
||||
host: string;
|
||||
port: number;
|
||||
pass: string;
|
||||
|
|
|
@ -19,7 +19,7 @@ import MachineInfo from './utils/machineInfo';
|
|||
import DependencyInfo from './utils/dependencyInfo';
|
||||
import serverStats from './daemons/server-stats';
|
||||
import notesStats from './daemons/notes-stats';
|
||||
|
||||
import db from './db/mongodb';
|
||||
import loadConfig from './config/load';
|
||||
import { Config } from './config/types';
|
||||
|
||||
|
@ -204,4 +204,6 @@ process.on('uncaughtException', err => {
|
|||
// Dying away...
|
||||
process.on('exit', code => {
|
||||
Logger.info(`The process is going exit (${code})`);
|
||||
|
||||
db.close();
|
||||
});
|
||||
|
|
63
src/server/api/endpoints/notes/search.ts
Normal file
63
src/server/api/endpoints/notes/search.ts
Normal file
|
@ -0,0 +1,63 @@
|
|||
import $ from 'cafy';
|
||||
import * as mongo from 'mongodb';
|
||||
import Note from '../../../../models/note';
|
||||
import { ILocalUser } from '../../../../models/user';
|
||||
import { pack } from '../../../../models/note';
|
||||
import es from '../../../../db/elasticsearch';
|
||||
|
||||
module.exports = (params: any, me: ILocalUser) => new Promise(async (res, rej) => {
|
||||
// Get 'query' parameter
|
||||
const [query, queryError] = $.str.get(params.query);
|
||||
if (queryError) return rej('invalid query param');
|
||||
|
||||
// Get 'offset' parameter
|
||||
const [offset = 0, offsetErr] = $.num.optional().min(0).get(params.offset);
|
||||
if (offsetErr) return rej('invalid offset param');
|
||||
|
||||
// Get 'limit' parameter
|
||||
const [limit = 10, limitErr] = $.num.optional().range(1, 30).get(params.limit);
|
||||
if (limitErr) return rej('invalid limit param');
|
||||
|
||||
es.search({
|
||||
index: 'misskey',
|
||||
type: 'note',
|
||||
body: {
|
||||
size: limit,
|
||||
from: offset,
|
||||
query: {
|
||||
simple_query_string: {
|
||||
fields: ['text'],
|
||||
query: query,
|
||||
default_operator: 'and'
|
||||
}
|
||||
},
|
||||
sort: [
|
||||
{ _doc: 'desc' }
|
||||
]
|
||||
}
|
||||
}, async (error, response) => {
|
||||
if (error) {
|
||||
console.error(error);
|
||||
return res(500);
|
||||
}
|
||||
|
||||
if (response.hits.total === 0) {
|
||||
return res([]);
|
||||
}
|
||||
|
||||
const hits = response.hits.hits.map(hit => new mongo.ObjectID(hit._id));
|
||||
|
||||
// Fetch found notes
|
||||
const notes = await Note.find({
|
||||
_id: {
|
||||
$in: hits
|
||||
}
|
||||
}, {
|
||||
sort: {
|
||||
_id: -1
|
||||
}
|
||||
});
|
||||
|
||||
res(await Promise.all(notes.map(note => pack(note, me))));
|
||||
});
|
||||
});
|
|
@ -18,6 +18,7 @@ import { IApp } from '../../models/app';
|
|||
import UserList from '../../models/user-list';
|
||||
import resolveUser from '../../remote/resolve-user';
|
||||
import Meta from '../../models/meta';
|
||||
import config from '../../config';
|
||||
|
||||
type Type = 'reply' | 'renote' | 'quote' | 'mention';
|
||||
|
||||
|
@ -366,7 +367,7 @@ export default async (user: IUser, data: {
|
|||
watch(user._id, data.reply);
|
||||
}
|
||||
|
||||
// (自分自身へのリプライでない限りは)通知を作成
|
||||
// 通知
|
||||
nm.push(data.reply.userId, 'reply');
|
||||
}
|
||||
|
||||
|
@ -427,4 +428,18 @@ export default async (user: IUser, data: {
|
|||
});
|
||||
}
|
||||
}
|
||||
|
||||
// Register to search database
|
||||
if (note.text && config.elasticsearch) {
|
||||
const es = require('../../../db/elasticsearch');
|
||||
|
||||
es.index({
|
||||
index: 'misskey',
|
||||
type: 'note',
|
||||
id: note._id.toString(),
|
||||
body: {
|
||||
text: note.text
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
|
|
Loading…
Reference in a new issue