Skip to content

Commit

Permalink
moves core search logic from search_results into own search_component…
Browse files Browse the repository at this point in the history
…, CoreSearchFilter, re #10804
  • Loading branch information
whatisgalen committed Apr 19, 2024
1 parent b922d21 commit 138e6dd
Showing 1 changed file with 70 additions and 0 deletions.
70 changes: 70 additions & 0 deletions arches/app/search/components/core_search.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,70 @@
from arches.app.models.system_settings import settings
from arches.app.search.components.base import BaseSearchFilter
from arches.app.search.mappings import RESOURCES_INDEX
from arches.app.utils.permission_backend import user_is_resource_reviewer
from datetime import datetime
import json

class CoreSearchFilter(BaseSearchFilter):
def view_data():
pass

def append_dsl(self, search_results_object, permitted_nodegroups, include_provisional, request):
search_results_object["query"].include("graph_id")
search_results_object["query"].include("root_ontology_class")
search_results_object["query"].include("resourceinstanceid")
search_results_object["query"].include("points")
search_results_object["query"].include("permissions.users_without_read_perm")
search_results_object["query"].include("permissions.users_without_edit_perm")
search_results_object["query"].include("permissions.users_without_delete_perm")
search_results_object["query"].include("permissions.users_with_no_access")
search_results_object["query"].include("geometries")
search_results_object["query"].include("displayname")
search_results_object["query"].include("displaydescription")
search_results_object["query"].include("map_popup")
search_results_object["query"].include("provisional_resource")
load_tiles = request.GET.get("tiles", False)
if load_tiles:
try:
load_tiles = json.loads(load_tiles)
except TypeError:
pass
if load_tiles:
search_results_object["query"].include("tiles")


def execute_query(self, search_results_object, response_object, request):
for_export = request.GET.get("export", None)
pages = request.GET.get("pages", None)
total = int(request.GET.get("total", "0"))
resourceinstanceid = request.GET.get("id", None)
dsl = search_results_object["query"]
if for_export or pages:
results = dsl.search(index=RESOURCES_INDEX, scroll="1m")
scroll_id = results["_scroll_id"]
if not pages:
if total <= settings.SEARCH_EXPORT_LIMIT:
pages = (total // settings.SEARCH_RESULT_LIMIT) + 1
if total > settings.SEARCH_EXPORT_LIMIT:
pages = int(settings.SEARCH_EXPORT_LIMIT // settings.SEARCH_RESULT_LIMIT) - 1
for page in range(int(pages)):
results_scrolled = dsl.se.es.scroll(scroll_id=scroll_id, scroll="1m")
results["hits"]["hits"] += results_scrolled["hits"]["hits"]
else:
results = dsl.search(index=RESOURCES_INDEX, id=resourceinstanceid)

if results is not None:
if "hits" not in results:
if "docs" in results:
results = {"hits": {"hits": results["docs"]}}
else:
results = {"hits": {"hits": [results]}}
response_object["results"] = results

def post_search_hook(search_results_object, response_object, permitted_nodegroups, request):
dsl = search_results_object["query"]
response_object["reviewer"] = user_is_resource_reviewer(request.user)
response_object["timestamp"] = datetime.now()
response_object["total_results"] = dsl.count(index=RESOURCES_INDEX)
response_object["userid"] = request.user.id

0 comments on commit 138e6dd

Please sign in to comment.