summaryrefslogtreecommitdiff
path: root/src/api/endpoints/posts/search.js
diff options
context:
space:
mode:
authorsyuilo <syuilotan@yahoo.co.jp>2017-03-03 06:48:26 +0900
committersyuilo <syuilotan@yahoo.co.jp>2017-03-03 06:48:26 +0900
commit6e181ee0f1ca2ecd0fdf3a78654607ef112f2a6a (patch)
treed9319e37433f57c70cdf9e66b57b525fd7bfc881 /src/api/endpoints/posts/search.js
parentwip (diff)
downloadmisskey-6e181ee0f1ca2ecd0fdf3a78654607ef112f2a6a.tar.gz
misskey-6e181ee0f1ca2ecd0fdf3a78654607ef112f2a6a.tar.bz2
misskey-6e181ee0f1ca2ecd0fdf3a78654607ef112f2a6a.zip
wip
Diffstat (limited to 'src/api/endpoints/posts/search.js')
-rw-r--r--src/api/endpoints/posts/search.js137
1 files changed, 0 insertions, 137 deletions
diff --git a/src/api/endpoints/posts/search.js b/src/api/endpoints/posts/search.js
deleted file mode 100644
index bc06340fda..0000000000
--- a/src/api/endpoints/posts/search.js
+++ /dev/null
@@ -1,137 +0,0 @@
-'use strict';
-
-/**
- * Module dependencies
- */
-import * as mongo from 'mongodb';
-const escapeRegexp = require('escape-regexp');
-import Post from '../../models/post';
-import serialize from '../../serializers/post';
-import config from '../../../conf';
-
-/**
- * Search a post
- *
- * @param {any} params
- * @param {any} me
- * @return {Promise<any>}
- */
-module.exports = (params, me) =>
- new Promise(async (res, rej) =>
-{
- // Get 'query' parameter
- let query = params.query;
- if (query === undefined || query === null || query.trim() === '') {
- return rej('query is required');
- }
-
- // Get 'offset' parameter
- let offset = params.offset;
- if (offset !== undefined && offset !== null) {
- offset = parseInt(offset, 10);
- } else {
- offset = 0;
- }
-
- // Get 'max' parameter
- let max = params.max;
- if (max !== undefined && max !== null) {
- max = parseInt(max, 10);
-
- // From 1 to 30
- if (!(1 <= max && max <= 30)) {
- return rej('invalid max range');
- }
- } else {
- max = 10;
- }
-
- // If Elasticsearch is available, search by it
- // If not, search by MongoDB
- (config.elasticsearch.enable ? byElasticsearch : byNative)
- (res, rej, me, query, offset, max);
-});
-
-// Search by MongoDB
-async function byNative(res, rej, me, query, offset, max) {
- const escapedQuery = escapeRegexp(query);
-
- // Search posts
- const posts = await Post
- .find({
- text: new RegExp(escapedQuery)
- }, {
- sort: {
- _id: -1
- },
- limit: max,
- skip: offset
- });
-
- // Serialize
- res(await Promise.all(posts.map(async post =>
- await serialize(post, me))));
-}
-
-// Search by Elasticsearch
-async function byElasticsearch(res, rej, me, query, offset, max) {
- const es = require('../../db/elasticsearch');
-
- es.search({
- index: 'misskey',
- type: 'post',
- body: {
- size: max,
- from: offset,
- query: {
- simple_query_string: {
- fields: ['text'],
- query: query,
- default_operator: 'and'
- }
- },
- sort: [
- { _doc: 'desc' }
- ],
- highlight: {
- pre_tags: ['<mark>'],
- post_tags: ['</mark>'],
- encoder: 'html',
- fields: {
- text: {}
- }
- }
- }
- }, 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 posts
- const posts = await Post
- .find({
- _id: {
- $in: hits
- }
- }, {
- sort: {
- _id: -1
- }
- });
-
- posts.map(post => {
- post._highlight = response.hits.hits.filter(hit => post._id.equals(hit._id))[0].highlight.text[0];
- });
-
- // Serialize
- res(await Promise.all(posts.map(async post =>
- await serialize(post, me))));
- });
-}