sql performance: removed join with view
This commit is contained in:
parent
7da6e755d7
commit
5dcce6d148
|
@ -14,11 +14,54 @@ import eu.dnetlib.organizations.model.view.OrganizationSimpleView;
|
|||
public interface OrganizationSimpleViewRepository extends ReadOnlyRepository<OrganizationSimpleView, String> {
|
||||
|
||||
// SEARCH
|
||||
@Query(value = "select o.* from organizations_simple_view o left outer join org_index_search idx on (idx.id = o.id) where idx.txt @@ plainto_tsquery(:text) and o.status in :statuses order by o.name", nativeQuery = true)
|
||||
@Query(value = "SELECT \n"
|
||||
+ " org.id,\n"
|
||||
+ " org.name,\n"
|
||||
+ " org.type,\n"
|
||||
+ " org.city,\n"
|
||||
+ " org.country,\n"
|
||||
+ " org.status,\n"
|
||||
+ " array_remove(array_agg(DISTINCT a.acronym), NULL) AS acronyms,\n"
|
||||
+ " array_remove(array_agg(DISTINCT u.url), NULL) AS urls,\n"
|
||||
+ " count(DISTINCT d1.oa_original_id) FILTER (WHERE d1.reltype = 'is_similar') AS n_similar_dups,\n"
|
||||
+ " count(DISTINCT d1.oa_original_id) FILTER (WHERE d1.reltype = 'suggested') AS n_suggested_dups,\n"
|
||||
+ " count(DISTINCT d1.oa_original_id) FILTER (WHERE d1.reltype = 'is_different') AS n_different_dups,\n"
|
||||
+ " org.status = 'raw' AND NOT ('is_similar' = ANY (array_agg(d2.reltype))) AS candidate_dup\n"
|
||||
+ "FROM org_index_search idx "
|
||||
+ " JOIN organizations org ON (idx.id = org.id) \n"
|
||||
+ " LEFT OUTER JOIN acronyms a ON org.id = a.id\n"
|
||||
+ " LEFT OUTER JOIN urls u ON org.id = u.id\n"
|
||||
+ " LEFT OUTER JOIN oa_duplicates d1 ON org.id = d1.local_id\n"
|
||||
+ " LEFT OUTER JOIN oa_duplicates d2 ON org.id = d2.oa_original_id\n"
|
||||
+ "WHERE idx.txt @@ plainto_tsquery(:text) AND org.status in :statuses\n"
|
||||
+ "GROUP BY org.id, org.name, org.type, org.city, org.country, org.status\n"
|
||||
+ "ORDER BY org.name", nativeQuery = true)
|
||||
Page<OrganizationSimpleView> search(@Param("text") String text, @Param("statuses") List<String> statuses, Pageable pageable);
|
||||
|
||||
// SEARCH FOR USER
|
||||
@Query(value = "select o.* from organizations_simple_view o left outer join org_index_search idx on (idx.id = o.id) left outer join user_countries uc on (uc.country = o.country) where idx.txt @@ plainto_tsquery(:text) and uc.email = :email and o.status in :statuses order by o.name", nativeQuery = true)
|
||||
@Query(value = "SELECT\n"
|
||||
+ " org.id,\n"
|
||||
+ " org.name,\n"
|
||||
+ " org.type,\n"
|
||||
+ " org.city,\n"
|
||||
+ " org.country,\n"
|
||||
+ " org.status,\n"
|
||||
+ " array_remove(array_agg(DISTINCT a.acronym), NULL) AS acronyms,\n"
|
||||
+ " array_remove(array_agg(DISTINCT u.url), NULL) AS urls,\n"
|
||||
+ " count(DISTINCT d1.oa_original_id) FILTER (WHERE d1.reltype = 'is_similar' ) AS n_similar_dups,\n"
|
||||
+ " count(DISTINCT d1.oa_original_id) FILTER (WHERE d1.reltype = 'suggested' ) AS n_suggested_dups,\n"
|
||||
+ " count(DISTINCT d1.oa_original_id) FILTER (WHERE d1.reltype = 'is_different') AS n_different_dups,\n"
|
||||
+ " (org.status = 'raw' AND not('is_similar' = ANY(array_agg(d2.reltype)))) AS candidate_dup\n"
|
||||
+ "FROM org_index_search idx\n"
|
||||
+ " JOIN organizations org ON (idx.id = org.id)\n"
|
||||
+ " LEFT OUTER JOIN acronyms a ON (org.id = a.id)\n"
|
||||
+ " LEFT OUTER JOIN urls u ON (org.id = u.id)\n"
|
||||
+ " LEFT OUTER JOIN oa_duplicates d1 ON (org.id = d1.local_id)\n"
|
||||
+ " LEFT OUTER JOIN oa_duplicates d2 ON (org.id = d2.oa_original_id)\n"
|
||||
+ " LEFT OUTER JOIN user_countries uc ON (uc.country = org.country) \n"
|
||||
+ "WHERE idx.txt @@ plainto_tsquery(:text) AND uc.email = :email AND org.status IN :statuses \n"
|
||||
+ "GROUP BY org.id, org.name, org.type, org.city, org.country, org.status\n"
|
||||
+ "ORDER BY org.name", nativeQuery = true)
|
||||
Page<OrganizationSimpleView> searchForUser(@Param("text") String text,
|
||||
@Param("email") String email,
|
||||
@Param("statuses") List<String> statuses,
|
||||
|
|
Loading…
Reference in New Issue