Query helpers refactoring
This commit is contained in:
parent
c4a4ec766f
commit
b2a0a55909
|
@ -1,11 +1,10 @@
|
||||||
|
|
||||||
import { elasticSearch } from '../../helpers/elastic-search'
|
import { elasticSearch } from '../../helpers/elastic-search'
|
||||||
import { logger } from '../../helpers/logger'
|
import { logger } from '../../helpers/logger'
|
||||||
import { CONFIG, ELASTIC_SEARCH_QUERY } from '../../initializers/constants'
|
import { CONFIG, ELASTIC_SEARCH_QUERY } from '../../initializers/constants'
|
||||||
import { DBChannel, EnhancedVideoChannel, IndexableChannel } from '../../types/channel.model'
|
import { DBChannel, EnhancedVideoChannel, IndexableChannel } from '../../types/channel.model'
|
||||||
import { ChannelsSearchQuery } from '../../types/search-query/channel-search.model'
|
import { ChannelsSearchQuery } from '../../types/search-query/channel-search.model'
|
||||||
import { buildSort, extractQueryResult } from './elastic-search-queries'
|
import { buildSort, extractQueryResult } from './elastic-search-queries'
|
||||||
import { buildChannelOrAccountCommonMapping } from './shared'
|
import { buildChannelOrAccountCommonMapping, buildMultiMatchBool } from './shared'
|
||||||
import { formatAvatarForAPI, formatAvatarForDB } from './shared/elastic-search-avatar'
|
import { formatAvatarForAPI, formatAvatarForDB } from './shared/elastic-search-avatar'
|
||||||
|
|
||||||
async function queryChannels (search: ChannelsSearchQuery) {
|
async function queryChannels (search: ChannelsSearchQuery) {
|
||||||
|
@ -14,29 +13,7 @@ async function queryChannels (search: ChannelsSearchQuery) {
|
||||||
const filter: any[] = []
|
const filter: any[] = []
|
||||||
|
|
||||||
if (search.search) {
|
if (search.search) {
|
||||||
Object.assign(bool, {
|
Object.assign(bool, buildMultiMatchBool(search.search, ELASTIC_SEARCH_QUERY.CHANNELS_MULTI_MATCH_FIELDS))
|
||||||
must: [
|
|
||||||
{
|
|
||||||
multi_match: {
|
|
||||||
query: search.search,
|
|
||||||
fields: ELASTIC_SEARCH_QUERY.CHANNELS_MULTI_MATCH_FIELDS,
|
|
||||||
fuzziness: ELASTIC_SEARCH_QUERY.FUZZINESS,
|
|
||||||
operator: ELASTIC_SEARCH_QUERY.OPERATOR,
|
|
||||||
minimum_should_match: ELASTIC_SEARCH_QUERY.MINIMUM_SHOULD_MATCH
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
// Better score for exact search
|
|
||||||
{
|
|
||||||
multi_match: {
|
|
||||||
query: search.search,
|
|
||||||
fields: ELASTIC_SEARCH_QUERY.CHANNELS_MULTI_MATCH_FIELDS,
|
|
||||||
operator: ELASTIC_SEARCH_QUERY.OPERATOR,
|
|
||||||
minimum_should_match: ELASTIC_SEARCH_QUERY.MINIMUM_SHOULD_MATCH
|
|
||||||
}
|
|
||||||
}
|
|
||||||
]
|
|
||||||
})
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (search.blockedAccounts) {
|
if (search.blockedAccounts) {
|
||||||
|
|
|
@ -5,7 +5,7 @@ import { CONFIG, ELASTIC_SEARCH_QUERY } from '../../initializers/constants'
|
||||||
import { DBPlaylist, EnhancedPlaylist, IndexablePlaylist } from '../../types/playlist.model'
|
import { DBPlaylist, EnhancedPlaylist, IndexablePlaylist } from '../../types/playlist.model'
|
||||||
import { PlaylistsSearchQuery } from '../../types/search-query/playlist-search.model'
|
import { PlaylistsSearchQuery } from '../../types/search-query/playlist-search.model'
|
||||||
import { buildSort, extractQueryResult } from './elastic-search-queries'
|
import { buildSort, extractQueryResult } from './elastic-search-queries'
|
||||||
import { addUUIDFilters } from './shared'
|
import { addUUIDFilters, buildMultiMatchBool } from './shared'
|
||||||
import { buildChannelOrAccountSummaryMapping, formatActorForDB, formatActorSummaryForAPI } from './shared/elastic-search-actor'
|
import { buildChannelOrAccountSummaryMapping, formatActorForDB, formatActorSummaryForAPI } from './shared/elastic-search-actor'
|
||||||
|
|
||||||
async function queryPlaylists (search: PlaylistsSearchQuery) {
|
async function queryPlaylists (search: PlaylistsSearchQuery) {
|
||||||
|
@ -14,29 +14,7 @@ async function queryPlaylists (search: PlaylistsSearchQuery) {
|
||||||
const filter: any[] = []
|
const filter: any[] = []
|
||||||
|
|
||||||
if (search.search) {
|
if (search.search) {
|
||||||
Object.assign(bool, {
|
Object.assign(bool, buildMultiMatchBool(search.search, ELASTIC_SEARCH_QUERY.PLAYLISTS_MULTI_MATCH_FIELDS))
|
||||||
must: [
|
|
||||||
{
|
|
||||||
multi_match: {
|
|
||||||
query: search.search,
|
|
||||||
fields: ELASTIC_SEARCH_QUERY.PLAYLISTS_MULTI_MATCH_FIELDS,
|
|
||||||
fuzziness: ELASTIC_SEARCH_QUERY.FUZZINESS,
|
|
||||||
operator: ELASTIC_SEARCH_QUERY.OPERATOR,
|
|
||||||
minimum_should_match: ELASTIC_SEARCH_QUERY.MINIMUM_SHOULD_MATCH
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
// Better score for exact search
|
|
||||||
{
|
|
||||||
multi_match: {
|
|
||||||
query: search.search,
|
|
||||||
fields: ELASTIC_SEARCH_QUERY.PLAYLISTS_MULTI_MATCH_FIELDS,
|
|
||||||
operator: ELASTIC_SEARCH_QUERY.OPERATOR,
|
|
||||||
minimum_should_match: ELASTIC_SEARCH_QUERY.MINIMUM_SHOULD_MATCH
|
|
||||||
}
|
|
||||||
}
|
|
||||||
]
|
|
||||||
})
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (search.blockedAccounts) {
|
if (search.blockedAccounts) {
|
||||||
|
|
|
@ -1,4 +1,3 @@
|
||||||
|
|
||||||
import { exists } from '../../helpers/custom-validators/misc'
|
import { exists } from '../../helpers/custom-validators/misc'
|
||||||
import { elasticSearch } from '../../helpers/elastic-search'
|
import { elasticSearch } from '../../helpers/elastic-search'
|
||||||
import { logger } from '../../helpers/logger'
|
import { logger } from '../../helpers/logger'
|
||||||
|
@ -7,7 +6,7 @@ import { CONFIG, ELASTIC_SEARCH_QUERY } from '../../initializers/constants'
|
||||||
import { VideosSearchQuery } from '../../types/search-query/video-search.model'
|
import { VideosSearchQuery } from '../../types/search-query/video-search.model'
|
||||||
import { DBVideo, DBVideoDetails, EnhancedVideo, IndexableVideo, IndexableVideoDetails } from '../../types/video.model'
|
import { DBVideo, DBVideoDetails, EnhancedVideo, IndexableVideo, IndexableVideoDetails } from '../../types/video.model'
|
||||||
import { buildSort, extractQueryResult } from './elastic-search-queries'
|
import { buildSort, extractQueryResult } from './elastic-search-queries'
|
||||||
import { addUUIDFilters } from './shared'
|
import { addUUIDFilters, buildMultiMatchBool } from './shared'
|
||||||
import { buildChannelOrAccountSummaryMapping, formatActorForDB, formatActorSummaryForAPI } from './shared/elastic-search-actor'
|
import { buildChannelOrAccountSummaryMapping, formatActorForDB, formatActorSummaryForAPI } from './shared/elastic-search-actor'
|
||||||
|
|
||||||
async function queryVideos (search: VideosSearchQuery) {
|
async function queryVideos (search: VideosSearchQuery) {
|
||||||
|
@ -16,29 +15,7 @@ async function queryVideos (search: VideosSearchQuery) {
|
||||||
const mustNot: any[] = []
|
const mustNot: any[] = []
|
||||||
|
|
||||||
if (search.search) {
|
if (search.search) {
|
||||||
Object.assign(bool, {
|
Object.assign(bool, buildMultiMatchBool(search.search, ELASTIC_SEARCH_QUERY.VIDEOS_MULTI_MATCH_FIELDS))
|
||||||
must: [
|
|
||||||
{
|
|
||||||
multi_match: {
|
|
||||||
query: search.search,
|
|
||||||
fields: ELASTIC_SEARCH_QUERY.VIDEOS_MULTI_MATCH_FIELDS,
|
|
||||||
fuzziness: ELASTIC_SEARCH_QUERY.FUZZINESS,
|
|
||||||
operator: ELASTIC_SEARCH_QUERY.OPERATOR,
|
|
||||||
minimum_should_match: ELASTIC_SEARCH_QUERY.MINIMUM_SHOULD_MATCH
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
// Better score for exact search
|
|
||||||
{
|
|
||||||
multi_match: {
|
|
||||||
query: search.search,
|
|
||||||
fields: ELASTIC_SEARCH_QUERY.VIDEOS_MULTI_MATCH_FIELDS,
|
|
||||||
operator: ELASTIC_SEARCH_QUERY.OPERATOR,
|
|
||||||
minimum_should_match: ELASTIC_SEARCH_QUERY.MINIMUM_SHOULD_MATCH
|
|
||||||
}
|
|
||||||
}
|
|
||||||
]
|
|
||||||
})
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (search.blockedAccounts) {
|
if (search.blockedAccounts) {
|
||||||
|
|
|
@ -1,3 +1,4 @@
|
||||||
|
import { ELASTIC_SEARCH_QUERY } from '../../../initializers/constants'
|
||||||
import validator from 'validator'
|
import validator from 'validator'
|
||||||
|
|
||||||
function addUUIDFilters (filters: any[], uuids: string[]) {
|
function addUUIDFilters (filters: any[], uuids: string[]) {
|
||||||
|
@ -31,6 +32,34 @@ function addUUIDFilters (filters: any[], uuids: string[]) {
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
export {
|
function buildMultiMatchBool (search: string, fields: string[]) {
|
||||||
addUUIDFilters
|
return {
|
||||||
|
must: [
|
||||||
|
{
|
||||||
|
multi_match: {
|
||||||
|
query: search,
|
||||||
|
fields,
|
||||||
|
fuzziness: ELASTIC_SEARCH_QUERY.FUZZINESS,
|
||||||
|
operator: ELASTIC_SEARCH_QUERY.OPERATOR,
|
||||||
|
minimum_should_match: ELASTIC_SEARCH_QUERY.MINIMUM_SHOULD_MATCH
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
should: [
|
||||||
|
// Better score for exact search
|
||||||
|
{
|
||||||
|
multi_match: {
|
||||||
|
query: search,
|
||||||
|
fields,
|
||||||
|
operator: ELASTIC_SEARCH_QUERY.OPERATOR,
|
||||||
|
minimum_should_match: ELASTIC_SEARCH_QUERY.MINIMUM_SHOULD_MATCH
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export {
|
||||||
|
addUUIDFilters,
|
||||||
|
buildMultiMatchBool
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue