diff --git a/seafevent_server/request_handler.py b/seafevent_server/request_handler.py index 65930919..80a5ba0c 100644 --- a/seafevent_server/request_handler.py +++ b/seafevent_server/request_handler.py @@ -141,6 +141,7 @@ def search(): query = data.get('query').strip() repos = data.get('repos') suffixes = data.get('suffixes') + search_path = data.get('search_path') if not query: return {'error_msg': 'query invalid.'}, 400 @@ -153,6 +154,6 @@ def search(): except: count = 20 - results = index_task_manager.keyword_search(query, repos, count, suffixes) + results = index_task_manager.keyword_search(query, repos, count, suffixes, search_path) return {'results': results}, 200 diff --git a/seasearch/index_store/index_manager.py b/seasearch/index_store/index_manager.py index b83c660f..3c8eef53 100644 --- a/seasearch/index_store/index_manager.py +++ b/seasearch/index_store/index_manager.py @@ -48,5 +48,5 @@ def delete_repo_filename_index(self, repo_id, repo_filename_index, repo_status_f repo_filename_index.delete_index_by_index_name(repo_filename_index_name) repo_status_filename_index.delete_documents_by_repo(repo_id) - def keyword_search(self, query, repos, repo_filename_index, count, suffixes=None): - return repo_filename_index.search_files(repos, query, 0, count, suffixes) + def keyword_search(self, query, repos, repo_filename_index, count, suffixes=None, search_path=None): + return repo_filename_index.search_files(repos, query, 0, count, suffixes, search_path) diff --git a/seasearch/index_store/repo_file_name_index.py b/seasearch/index_store/repo_file_name_index.py index 852d5d08..70417e8a 100644 --- a/seasearch/index_store/repo_file_name_index.py +++ b/seasearch/index_store/repo_file_name_index.py @@ -63,7 +63,6 @@ class RepoFileNameIndex(object): } } - def __init__(self, seasearch_api, repo_data, shard_num): self.seasearch_api = seasearch_api self.repo_data = repo_data @@ -122,7 +121,7 @@ def _add_suffix_filter(self, query_map, suffixes): query_map['bool']['filter'].append({'term': {'suffix': suffixes.lower()}}) return query_map - def search_files(self, repos, keyword, start=0, size=10, suffixes=None): + def search_files(self, repos, keyword, start=0, size=10, suffixes=None, search_path=None): bulk_search_params = [] for repo in repos: repo_id = repo[0] @@ -134,9 +133,13 @@ def search_files(self, repos, keyword, start=0, size=10, suffixes=None): if origin_repo_id: repo_id = origin_repo_id - query_map = self._add_path_filter(query_map, origin_path) - query_map = self._add_suffix_filter(query_map, suffixes) + if search_path: + search_path = os.path.join(origin_path, search_path.strip('/')) + else: + search_path = origin_path + query_map = self._add_suffix_filter(query_map, suffixes) + query_map = self._add_path_filter(query_map, search_path) data = { 'query': query_map, 'from': start, diff --git a/seasearch/index_task/index_task_manager.py b/seasearch/index_task/index_task_manager.py index 567e5453..72316ce5 100644 --- a/seasearch/index_task/index_task_manager.py +++ b/seasearch/index_task/index_task_manager.py @@ -57,9 +57,9 @@ def _parse_config(self, config): int(SHARD_NUM), ) - def keyword_search(self, query, repos, count, suffixes): + def keyword_search(self, query, repos, count, suffixes, search_path): return self.index_manager.keyword_search( - query, repos, self._repo_filename_index, count, suffixes + query, repos, self._repo_filename_index, count, suffixes, search_path )