# Copyright (C) 2012-2024 RhodeCode GmbH # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License, version 3 # (only), as published by the Free Software Foundation. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU Affero General Public License # along with this program. If not, see . # # This program is dual-licensed. If you wish to learn more about the # RhodeCode Enterprise Edition, including its added features, Support services, # and proprietary license terms, please see https://rhodecode.com/licenses/ """ Whoosh fallback schema for RhodeCode in case rhodecode_tools defined one is not available """ from whoosh.analysis import RegexTokenizer, LowercaseFilter from whoosh.formats import Characters from whoosh.fields import ( TEXT, ID, STORED, NUMERIC, BOOLEAN, Schema, FieldType, DATETIME) # CUSTOM ANALYZER wordsplit + lowercase filter for case insensitive search ANALYZER = RegexTokenizer(expression=r"\w+") | LowercaseFilter() # FILE INDEX SCHEMA DEFINITION FILE_INDEX_NAME = 'FILE_INDEX' FILE_SCHEMA = Schema( fileid=ID(unique=True), # Path repository=ID(stored=True), repository_id=NUMERIC(unique=True, stored=True), # Numeric id of repo repo_name=TEXT(stored=True), owner=TEXT(), path=TEXT(stored=True), content=FieldType(format=Characters(), analyzer=ANALYZER, scorable=True, stored=True), modtime=STORED(), md5=STORED(), extension=ID(stored=True), commit_id=TEXT(stored=True), size=NUMERIC(int, 64, signed=False, stored=True), mimetype=TEXT(stored=True), lines=NUMERIC(int, 64, signed=False, stored=True), ) # COMMIT INDEX SCHEMA COMMIT_INDEX_NAME = 'COMMIT_INDEX' COMMIT_SCHEMA = Schema( commit_id=ID(unique=True, stored=True), repository=ID(unique=True, stored=True), repository_id=NUMERIC(unique=True, stored=True), commit_idx=NUMERIC(stored=True, sortable=True), commit_idx_sort=ID(), date=NUMERIC(int, 64, signed=False, stored=True, sortable=True), owner=TEXT(stored=True), author=TEXT(stored=True), message=FieldType(format=Characters(), analyzer=ANALYZER, scorable=True, stored=True), parents=TEXT(stored=True), added=TEXT(stored=True), # space separated names of added files removed=TEXT(stored=True), # space separated names of removed files changed=TEXT(stored=True), # space separated names of changed files )