Initial commit
This commit is contained in:
@@ -0,0 +1,183 @@
|
||||
const debug = require('debug')('termPortal:generate-query')
|
||||
const genAllHitQuery = require('./main/all')
|
||||
const genAllAggQuery = require('./main/aggregate-all')
|
||||
const genPhraseHitQuery = require('./main/phrase')
|
||||
const genPhraseAggQuery = require('./main/aggregate-phrase')
|
||||
const genWildcardHitQuery = require('./main/wildcard')
|
||||
const genWildcardAggQuery = require('./main/aggregate-wildcard')
|
||||
const genMultiWordHitQuery = require('./main/word-multi')
|
||||
const genWordAggQuery = require('./main/aggregate-word')
|
||||
const genSingleWordHitQuery = require('./main/word-single')
|
||||
const genEditorAllQuery = require('./editor/all')
|
||||
const genEditorExistsQuery = require('./editor/exists')
|
||||
const genEditorPhraseQuery = require('./editor/phrase')
|
||||
const genEditorWildcardQuery = require('./editor/wildcard')
|
||||
const genEditorWordsQuery = require('./editor/words')
|
||||
const genConsultancyAllQuery = require('./consultancy/all')
|
||||
const genConsultancyPhraseQuery = require('./consultancy/phrase')
|
||||
const genConsultancyWildcardQuery = require('./consultancy/wildcard')
|
||||
const genConsultancyWordsQuery = require('./consultancy/words')
|
||||
|
||||
const notOnlyAsterisks = /[^*"\s]/
|
||||
const hasWildcards = /[*?]/
|
||||
const hasWhitespace = /\s/
|
||||
|
||||
// Determines query type, constructs and returns appropriate search engine query(es).
|
||||
exports.main = async (
|
||||
searchString,
|
||||
filters,
|
||||
hitsPerPage,
|
||||
page,
|
||||
withAggregation
|
||||
) => {
|
||||
let hitsQuery
|
||||
let aggregateQuery
|
||||
|
||||
const firstChar = searchString[0]
|
||||
const lastChar = searchString[searchString.length - 1]
|
||||
|
||||
// TODO Aditional sanitization/transformation?
|
||||
|
||||
if (!notOnlyAsterisks.test(searchString)) {
|
||||
debug('query type: all')
|
||||
hitsQuery = genAllHitQuery(filters, hitsPerPage, page)
|
||||
if (withAggregation) {
|
||||
aggregateQuery = genAllAggQuery(hitsQuery)
|
||||
}
|
||||
} else if (firstChar === '"' && lastChar === '"') {
|
||||
debug('query type: phrase')
|
||||
searchString = searchString.slice(1, -1)
|
||||
hitsQuery = await genPhraseHitQuery(
|
||||
searchString,
|
||||
filters,
|
||||
hitsPerPage,
|
||||
page
|
||||
)
|
||||
if (withAggregation) {
|
||||
aggregateQuery = genPhraseAggQuery(searchString, hitsQuery)
|
||||
}
|
||||
} else if (hasWildcards.test(searchString)) {
|
||||
debug('query type: wildcard')
|
||||
let slovenianFieldQueries, foreignFieldQueries
|
||||
;[hitsQuery, slovenianFieldQueries, foreignFieldQueries] =
|
||||
await genWildcardHitQuery(searchString, filters, hitsPerPage, page)
|
||||
if (withAggregation) {
|
||||
aggregateQuery = genWildcardAggQuery(
|
||||
hitsQuery,
|
||||
slovenianFieldQueries,
|
||||
foreignFieldQueries
|
||||
)
|
||||
}
|
||||
} else if (hasWhitespace.test(searchString)) {
|
||||
debug('query type: multi word')
|
||||
hitsQuery = await genMultiWordHitQuery(
|
||||
searchString,
|
||||
filters,
|
||||
hitsPerPage,
|
||||
page
|
||||
)
|
||||
if (withAggregation) {
|
||||
aggregateQuery = genWordAggQuery(searchString, hitsQuery)
|
||||
}
|
||||
} else {
|
||||
debug('query type: single word')
|
||||
hitsQuery = await genSingleWordHitQuery(
|
||||
searchString,
|
||||
filters,
|
||||
hitsPerPage,
|
||||
page
|
||||
)
|
||||
if (withAggregation) {
|
||||
aggregateQuery = genWordAggQuery(searchString, hitsQuery)
|
||||
}
|
||||
}
|
||||
|
||||
return withAggregation ? [hitsQuery, aggregateQuery] : hitsQuery
|
||||
}
|
||||
|
||||
// Determines query type, constructs and returns appropriate search engine query for editor.
|
||||
exports.editor = (dictionaryId, searchField, searchString, filters) => {
|
||||
let hitsQuery
|
||||
|
||||
const firstChar = searchString[0]
|
||||
const lastChar = searchString[searchString.length - 1]
|
||||
|
||||
// TODO Aditional sanitization/transformation?
|
||||
|
||||
if (!searchString) {
|
||||
debug('query type: all')
|
||||
hitsQuery = genEditorAllQuery(dictionaryId, filters)
|
||||
} else if (!notOnlyAsterisks.test(searchString)) {
|
||||
debug('query type: exists')
|
||||
hitsQuery = genEditorExistsQuery(dictionaryId, searchField, filters)
|
||||
} else if (firstChar === '"' && lastChar === '"') {
|
||||
debug('query type: phrase')
|
||||
searchString = searchString.slice(1, -1)
|
||||
hitsQuery = genEditorPhraseQuery(
|
||||
dictionaryId,
|
||||
searchField,
|
||||
searchString,
|
||||
filters
|
||||
)
|
||||
} else if (hasWildcards.test(searchString)) {
|
||||
debug('query type: wildcard')
|
||||
hitsQuery = genEditorWildcardQuery(
|
||||
dictionaryId,
|
||||
searchField,
|
||||
searchString,
|
||||
filters
|
||||
)
|
||||
} else {
|
||||
debug('query type: words')
|
||||
hitsQuery = genEditorWordsQuery(
|
||||
dictionaryId,
|
||||
searchField,
|
||||
searchString,
|
||||
filters
|
||||
)
|
||||
}
|
||||
|
||||
return hitsQuery
|
||||
}
|
||||
|
||||
// Determines query type, constructs and returns appropriate search engine query for consultancy.
|
||||
exports.consultancy = (searchString, filters, hitsPerPage, page) => {
|
||||
let hitsQuery
|
||||
|
||||
const firstChar = searchString[0]
|
||||
const lastChar = searchString[searchString.length - 1]
|
||||
|
||||
// TODO Aditional sanitization/transformation?
|
||||
|
||||
if (!notOnlyAsterisks.test(searchString)) {
|
||||
debug('query type: all')
|
||||
hitsQuery = genConsultancyAllQuery(filters, hitsPerPage, page)
|
||||
} else if (firstChar === '"' && lastChar === '"') {
|
||||
debug('query type: phrase')
|
||||
searchString = searchString.slice(1, -1)
|
||||
hitsQuery = genConsultancyPhraseQuery(
|
||||
searchString,
|
||||
filters,
|
||||
hitsPerPage,
|
||||
page
|
||||
)
|
||||
} else if (hasWildcards.test(searchString)) {
|
||||
debug('query type: wildcard')
|
||||
hitsQuery = genConsultancyWildcardQuery(
|
||||
searchString,
|
||||
filters,
|
||||
hitsPerPage,
|
||||
page
|
||||
)
|
||||
} else {
|
||||
debug('query type: words')
|
||||
hitsQuery = genConsultancyWordsQuery(
|
||||
searchString,
|
||||
filters,
|
||||
hitsPerPage,
|
||||
page
|
||||
)
|
||||
}
|
||||
|
||||
return hitsQuery
|
||||
}
|
||||
Reference in New Issue
Block a user