Press n or j to go to the next uncovered block, b, p or k for the previous block.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 | 16x 16x 16x 16x 16x 16x 16x | import Crowi from 'server/crowi'
import ApiResponse from '../util/apiResponse'
import ApiPaginate from '../util/apiPaginate'
import Debug from 'debug'
const debug = Debug('crowi:routes:search')
export default (crowi: Crowi) => {
const Page = crowi.model('Page')
const actions = {} as any
const api = (actions.api = {} as any)
actions.searchPage = function(req, res) {
var keyword = req.query.q || null
var search = crowi.getSearcher()
if (!search) {
return res.json(ApiResponse.error('Configuration of ELASTICSEARCH_URI is required.'))
}
return res.render('search', {
q: keyword,
})
}
/**
* @api {get} /search search page
* @apiName Search
* @apiGroup Search
*
* @apiParam {String} q keyword
* @apiParam {String} path
* @apiParam {String} offset
* @apiParam {String} limit
*/
api.search = async function(req, res) {
const { user } = req
const { q: keyword = null, tree = null, type = null } = req.query
let paginateOpts
try {
paginateOpts = ApiPaginate.parseOptionsForElasticSearch(req.query)
} catch (e) {
res.json(ApiResponse.error(e))
}
if (keyword === null || keyword === '') {
return res.json(ApiResponse.error('keyword should not empty.'))
}
const search = crowi.getSearcher()
if (!search) {
return res.json(ApiResponse.error('Configuration of ELASTICSEARCH_URI is required.'))
}
const searchOpts = { ...paginateOpts, type }
let doSearch
if (tree) {
doSearch = search.searchKeywordUnderPath(keyword, tree, user, searchOpts)
} else {
doSearch = search.searchKeyword(keyword, user, searchOpts)
}
try {
const { meta, data: searchResult } = await doSearch
const pages = await Page.populatePageListToAnyObjects(searchResult)
const data = pages
.filter(page => {
if (Object.keys(page).length < 12) {
// FIXME: 12 is a number of columns.
return false
}
return true
})
.map(page => {
return { ...page, bookmarkCount: (page._source && page._source.bookmark_count) || 0 }
})
return res.json(ApiResponse.success({ meta, searchResult, data }))
} catch (err) {
debug('Error on searching:', err)
return res.json(ApiResponse.error(err))
}
}
return actions
}
|