Skip to content

Commit

Permalink
adjust boosting function, reduce non article types
Browse files Browse the repository at this point in the history
  • Loading branch information
kadamidev committed Aug 13, 2024
1 parent dde29d1 commit e61c8fc
Show file tree
Hide file tree
Showing 2 changed files with 61 additions and 26 deletions.
5 changes: 4 additions & 1 deletion desci-server/src/controllers/search/multiQuery.ts
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,10 @@ export const multiQuery = async (
});
}

const esQueries = validEntityQueries.map((q) => buildMultiMatchQuery(q.query, q.entity));
const esQueries = validEntityQueries.map((q) => {
const [entity, query] = Object.entries(q)[0];
return buildMultiMatchQuery(query, entity, fuzzy);
});

const primaryEntity = Object.keys(validEntityQueries[0])[0];
const esSort = buildSortQuery(DENORMALIZED_WORKS_INDEX, sort.field, sort.order);
Expand Down
82 changes: 57 additions & 25 deletions desci-server/src/services/ElasticSearchService.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,12 @@
import {
QueryDslBoolQuery,
QueryDslFunctionBoostMode,
QueryDslFunctionScoreContainer,
QueryDslFunctionScoreMode,
QueryDslFunctionScoreQuery,
QueryDslQueryContainer,
QueryDslTermQuery,
QueryDslTermsQuery,
QueryDslTextQueryType,
} from '@elastic/elasticsearch/lib/api/types.js';

Expand Down Expand Up @@ -65,31 +71,53 @@ const sortConfigs: { [entity: string]: { [sortType: string]: (order: SortOrder)
},
};

export function scoreBoostFunction(query: Record<'multi_match', MultiMatchQuery>) {
return {
function_score: {
query,
functions: [
{
field_value_factor: {
field: 'cited_by_count',
factor: 1.5,
modifier: 'log1p',
missing: 0,
},
},
{
field_value_factor: {
field: 'authors.author_cited_by_count',
factor: 0.1,
modifier: 'log1p',
missing: 0,
},
},
],
boost_mode: 'sum' as QueryDslFunctionBoostMode,
score_mode: 'sum' as QueryDslFunctionBoostMode,
export function createFunctionScoreQuery(query: QueryDslQueryContainer, entity: string): QueryDslFunctionScoreQuery {
/**
* Boost work citations, author citations, and reduce non articles
*/
const functions: QueryDslFunctionScoreContainer[] = [
{
field_value_factor: {
field: 'cited_by_count',
factor: 1.5,
modifier: 'log1p',
missing: 0,
},
},
{
field_value_factor: {
field: 'authors.author_cited_by_count',
factor: 0.1,
modifier: 'log1p',
missing: 0,
},
},
];

if (entity === 'works' || 'works_single') {
const nonArticleFilter: QueryDslQueryContainer = {
bool: {
must_not: [
{
term: {
type: 'article',
} as QueryDslTermsQuery,
},
],
} as QueryDslBoolQuery,
};

functions.push({
weight: 0.5,
filter: nonArticleFilter,
});
}

return {
query,
functions,
boost_mode: 'multiply' as QueryDslFunctionBoostMode,
score_mode: 'multiply' as QueryDslFunctionScoreMode,
};
}

Expand Down Expand Up @@ -165,7 +193,11 @@ export function buildMultiMatchQuery(query: string, entity: string, fuzzy?: numb
},
};

if (entity === 'works_single') return scoreBoostFunction(multiMatchQuery) as QueryDslQueryContainer;
if (entity === 'works' || entity === 'works_single') {
return {
function_score: createFunctionScoreQuery(multiMatchQuery, entity),
};
}
return multiMatchQuery as QueryDslQueryContainer;
}

Expand Down

0 comments on commit e61c8fc

Please sign in to comment.