Gitlab 18.2 EE(reproducible): Advanced Search - Elasticsearch 8.10.2 "[bool] failed to parse field [should]"

similar to #218324 (closed), When using Elasticsearch 8.10.2 with latest GitLab 18.2 for advanced search, you get a 500 error when searching for projects.

image

services:
  gitlab:
    image: gitlab/gitlab-ee:latest
    container_name: gitlab
    restart: always
    hostname: 'gitlab.localhost'
    environment:
      GITLAB_OMNIBUS_CONFIG: |
        # Add any other gitlab.rb configuration here, each on its own line
        external_url 'http://127.0.0.1'
        gitlab_rails['elasticsearch_enabled'] = true
        gitlab_rails['elasticsearch_url'] = ['http://elasticsearch:9200']
        gitlab_rails['elasticsearch_indexer_enabled'] = true
        gitlab_rails['elasticsearch_aws'] = false
    ports:
      - '80:80'
      - '443:443'
      - '22:22'
    volumes:
      - './config:/etc/gitlab'
      - './logs:/var/log/gitlab'
      - './data:/var/opt/gitlab'
    shm_size: '1G'
  elasticsearch:
    image: docker.elastic.co/elasticsearch/elasticsearch:8.10.2
    container_name: elasticsearch
    restart: always
    environment:
      - discovery.type=single-node
      - TZ=Asia/Shanghai
      - xpack.security.enabled=false
    # Uncomment the following lines to persist data, config, logs, and plugins
    # volumes:
    #   - ./elasticsearch/data:/usr/share/elasticsearch/data
    #   - ./elasticsearch/config:/usr/share/elasticsearch/config
    #   - ./elasticsearch/logs:/usr/share/elasticsearch/logs
    #   - ./elasticsearch/plugins:/usr/share/elasticsearch/plugins
    ports:
      - '9200:9200'
      - '9300:9300'
    deploy:
      resources:
        limits:
          memory: 16GiB
          cpus: '4'

I checked the log:

  • "[bool] failed to parse field [filter]"
  • "[bool] failed to parse field [should]"
  • "query malformed, must start with start_object"

Full log

@Musicminion ➜ /workspaces/gitlab-mwe (main) $ docker compose logs | grep 01K0F123AHQ96EA55NPN0BW2QJ
gitlab         | {"method":"GET","path":"/search","format":"html","controller":"SearchController","action":"show","status":500,"time":"2025-07-18T15:04:50.804Z","params":[{"key":"scope","value":"projects"},{"key":"search","value":"[FILTERED]"}],"correlation_id":"01K0F123AHQ96EA55NPN0BW2QJ","meta.caller_id":"SearchController#show","meta.feature_category":"global_search","meta.organization_id":1,"meta.remote_ip":"172.18.0.1","meta.user":"root","meta.user_id":1,"meta.client_id":"user/1","meta.search.group_id":null,"meta.search.project_id":null,"meta.search.scope":"projects","meta.search.page":"1","meta.search.filters.confidential":null,"meta.search.filters.state":null,"meta.search.force_search_results":null,"meta.search.filters.language":null,"meta.search.type":"advanced","meta.search.level":"global","meta.search.filters.source_branch":null,"meta.search.filters.not_source_branch":null,"meta.search.filters.target_branch":null,"meta.search.filters.not_target_branch":null,"meta.search.filters.author_username":null,"meta.search.filters.not_author_username":null,"remote_ip":"172.18.0.1","user_id":1,"username":"root","ua":"Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:140.0) Gecko/20100101 Firefox/140.0","queue_duration_s":0.005785,"request_urgency":"low","target_duration_s":5,"redis_calls":8,"redis_allowed_cross_slot_calls":1,"redis_duration_s":6.979999999999999e-4,"redis_read_bytes":396,"redis_write_bytes":957,"redis_db_load_balancing_calls":2,"redis_db_load_balancing_duration_s":0.000137,"redis_db_load_balancing_write_bytes":104,"redis_feature_flag_calls":1,"redis_feature_flag_duration_s":0.000082,"redis_feature_flag_read_bytes":115,"redis_feature_flag_write_bytes":68,"redis_rate_limiting_calls":2,"redis_rate_limiting_duration_s":0.000167,"redis_rate_limiting_read_bytes":2,"redis_rate_limiting_write_bytes":146,"redis_sessions_calls":3,"redis_sessions_allowed_cross_slot_calls":1,"redis_sessions_duration_s":0.000312,"redis_sessions_read_bytes":279,"redis_sessions_write_bytes":639,"elasticsearch_calls":1,"elasticsearch_duration_s":0.002981,"elasticsearch_timed_out_count":0,"db_count":4,"db_write_count":0,"db_cached_count":0,"db_txn_count":0,"db_replica_txn_count":0,"db_primary_txn_count":0,"db_replica_count":0,"db_primary_count":4,"db_replica_write_count":0,"db_primary_write_count":0,"db_replica_cached_count":0,"db_primary_cached_count":0,"db_replica_wal_count":0,"db_primary_wal_count":0,"db_replica_wal_cached_count":0,"db_primary_wal_cached_count":0,"db_replica_txn_max_duration_s":0.0,"db_primary_txn_max_duration_s":0.0,"db_replica_txn_duration_s":0.0,"db_primary_txn_duration_s":0.0,"db_replica_duration_s":0.0,"db_primary_duration_s":0.002,"db_main_txn_count":0,"db_ci_txn_count":0,"db_main_replica_txn_count":0,"db_ci_replica_txn_count":0,"db_main_count":4,"db_ci_count":0,"db_main_replica_count":0,"db_ci_replica_count":0,"db_main_write_count":0,"db_ci_write_count":0,"db_main_replica_write_count":0,"db_ci_replica_write_count":0,"db_main_cached_count":0,"db_ci_cached_count":0,"db_main_replica_cached_count":0,"db_ci_replica_cached_count":0,"db_main_wal_count":0,"db_ci_wal_count":0,"db_main_replica_wal_count":0,"db_ci_replica_wal_count":0,"db_main_wal_cached_count":0,"db_ci_wal_cached_count":0,"db_main_replica_wal_cached_count":0,"db_ci_replica_wal_cached_count":0,"db_main_txn_max_duration_s":0.0,"db_ci_txn_max_duration_s":0.0,"db_main_replica_txn_max_duration_s":0.0,"db_ci_replica_txn_max_duration_s":0.0,"db_main_txn_duration_s":0.0,"db_ci_txn_duration_s":0.0,"db_main_replica_txn_duration_s":0.0,"db_ci_replica_txn_duration_s":0.0,"db_main_duration_s":0.002,"db_ci_duration_s":0.0,"db_main_replica_duration_s":0.0,"db_ci_replica_duration_s":0.0,"path_traversal_check_duration_s":0.000217,"cpu_s":0.031397,"mem_objects":21029,"mem_bytes":3113440,"mem_mallocs":6024,"mem_total_bytes":3954600,"pid":754,"worker_id":"puma_2","rate_limiting_gates":["search_rate_limit"],"exception.class":"Elasticsearch::Transport::Transport::Errors::BadRequest","exception.message":"[400] {\"error\":{\"root_cause\":[{\"type\":\"parsing_exception\",\"reason\":\"[_na] query malformed, must start with start_object\",\"line\":1,\"col\":787}],\"type\":\"x_content_parse_exception\",\"reason\":\"[1:787] [bool] failed to parse field [filter]\",\"caused_by\":{\"type\":\"x_content_parse_exception\",\"reason\":\"[1:787] [bool] failed to parse field [should]\",\"caused_by\":{\"type\":\"parsing_exception\",\"reason\":\"[_na] query malformed, must start with start_object\",\"line\":1,\"col\":787}}},\"status\":400}","exception.backtrace":["elasticsearch-transport (7.17.11) lib/elasticsearch/transport/transport/base.rb:218:in `__raise_transport_error'","elasticsearch-transport (7.17.11) lib/elasticsearch/transport/transport/base.rb:341:in `perform_request'","elasticsearch-transport (7.17.11) lib/elasticsearch/transport/transport/http/faraday.rb:36:in `perform_request'","elasticsearch-transport (7.17.11) lib/elasticsearch/transport/client.rb:197:in `perform_request'","lib/gitlab/instrumentation/elasticsearch_transport.rb:12:in `perform_request'","elasticsearch (7.17.11) lib/elasticsearch.rb:41:in `method_missing'","elasticsearch-api (7.17.11) lib/elasticsearch/api/actions/search.rb:104:in `search'","ee/config/initializers/elastic_client_setup.rb:44:in `execute!'","elasticsearch-model (7.2.1) lib/elasticsearch/model/response.rb:46:in `response'","ee/lib/gem_extensions/elasticsearch/model/response/records.rb:10:in `ids'","ee/lib/gem_extensions/elasticsearch/model/adapter/active_record/records.rb:13:in `records'","elasticsearch-model (7.2.1) lib/elasticsearch/model/response/records.rb:77:in `method_missing'","ee/lib/gitlab/elastic/search_results.rb:321:in `eager_load'","ee/lib/gitlab/elastic/search_results.rb:137:in `objects'","app/services/search_service.rb:59:in `search_objects'","app/presenters/search_service_presenter.rb:25:in `search_objects'","app/controllers/search_controller.rb:160:in `block in haml_search_results'","benchmark (0.4.0) lib/benchmark.rb:323:in `realtime'","app/controllers/search_controller.rb:158:in `haml_search_results'","app/controllers/search_controller.rb:77:in `show'","actionpack (7.1.5.1) lib/action_controller/metal/basic_implicit_render.rb:6:in `send_action'","actionpack (7.1.5.1) lib/abstract_controller/base.rb:224:in `process_action'","actionpack (7.1.5.1) lib/action_controller/metal/rendering.rb:165:in `process_action'","actionpack (7.1.5.1) lib/abstract_controller/callbacks.rb:259:in `block in process_action'","activesupport (7.1.5.1) lib/active_support/callbacks.rb:121:in `block in run_callbacks'","app/controllers/application_controller.rb:541:in `block in allow_gitaly_ref_name_caching'","lib/gitlab/gitaly_client.rb:479:in `allow_ref_name_caching'","app/controllers/application_controller.rb:540:in `allow_gitaly_ref_name_caching'","activesupport (7.1.5.1) lib/active_support/callbacks.rb:130:in `block in run_callbacks'","app/controllers/application_controller.rb:492:in `set_current_admin'","activesupport (7.1.5.1) lib/active_support/callbacks.rb:130:in `block in run_callbacks'","lib/gitlab/session.rb:11:in `with_session'","app/controllers/application_controller.rb:483:in `set_session_storage'","activesupport (7.1.5.1) lib/active_support/callbacks.rb:130:in `block in run_callbacks'","lib/gitlab/i18n.rb:116:in `with_locale'","lib/gitlab/i18n.rb:122:in `with_user_locale'","app/controllers/application_controller.rb:474:in `set_locale'","activesupport (7.1.5.1) lib/active_support/callbacks.rb:130:in `block in run_callbacks'","app/controllers/application_controller.rb:463:in `set_current_context'","activesupport (7.1.5.1) lib/active_support/callbacks.rb:130:in `block in run_callbacks'","lib/gitlab/ip_address_state.rb:11:in `with'","app/controllers/application_controller.rb:469:in `set_current_ip_address'","activesupport (7.1.5.1) lib/active_support/callbacks.rb:130:in `block in run_callbacks'","marginalia (1.11.1) lib/marginalia.rb:109:in `record_query_comment'","activesupport (7.1.5.1) lib/active_support/callbacks.rb:130:in `block in run_callbacks'","sentry-rails (5.23.0) lib/sentry/rails/controller_transaction.rb:34:in `block in sentry_around_action'","sentry-ruby (5.23.0) lib/sentry/hub.rb:138:in `with_child_span'","sentry-ruby (5.23.0) lib/sentry-ruby.rb:515:in `with_child_span'","sentry-rails (5.23.0) lib/sentry/rails/controller_transaction.rb:18:in `sentry_around_action'","activesupport (7.1.5.1) lib/active_support/callbacks.rb:130:in `block in run_callbacks'","activesupport (7.1.5.1) lib/active_support/callbacks.rb:141:in `run_callbacks'","actionpack (7.1.5.1) lib/abstract_controller/callbacks.rb:258:in `process_action'","actionpack (7.1.5.1) lib/action_controller/metal/rescue.rb:25:in `process_action'","actionpack (7.1.5.1) lib/action_controller/metal/instrumentation.rb:74:in `block in process_action'","activesupport (7.1.5.1) lib/active_support/notifications.rb:206:in `block in instrument'","activesupport (7.1.5.1) lib/active_support/notifications/instrumenter.rb:58:in `instrument'","activesupport (7.1.5.1) lib/active_support/notifications.rb:206:in `instrument'","actionpack (7.1.5.1) lib/action_controller/metal/instrumentation.rb:73:in `process_action'","actionpack (7.1.5.1) lib/action_controller/metal/params_wrapper.rb:261:in `process_action'","activerecord (7.1.5.1) lib/active_record/railties/controller_runtime.rb:32:in `process_action'","actionpack (7.1.5.1) lib/abstract_controller/base.rb:160:in `process'","actionview (7.1.5.1) lib/action_view/rendering.rb:40:in `process'","actionpack (7.1.5.1) lib/action_controller/metal.rb:227:in `dispatch'","actionpack (7.1.5.1) lib/action_controller/metal.rb:307:in `block in dispatch'","lib/gitlab/middleware/action_controller_static_context.rb:23:in `call'","actionpack (7.1.5.1) lib/action_controller/metal.rb:307:in `dispatch'","actionpack (7.1.5.1) lib/action_dispatch/routing/route_set.rb:49:in `dispatch'","actionpack (7.1.5.1) lib/action_dispatch/routing/route_set.rb:32:in `serve'","actionpack (7.1.5.1) lib/action_dispatch/journey/router.rb:51:in `block in serve'","config/initializers/action_dispatch_journey_router.rb:52:in `block in find_routes'","config/initializers/action_dispatch_journey_router.rb:25:in `map!'","config/initializers/action_dispatch_journey_router.rb:25:in `find_routes'","actionpack (7.1.5.1) lib/action_dispatch/journey/router.rb:32:in `serve'","actionpack (7.1.5.1) lib/action_dispatch/routing/route_set.rb:882:in `call'","gitlab-experiment (0.9.1) lib/gitlab/experiment/middleware.rb:19:in `call'","flipper (0.28.3) lib/flipper/middleware/memoizer.rb:72:in `memoized_call'","flipper (0.28.3) lib/flipper/middleware/memoizer.rb:37:in `call'","lib/gitlab/metrics/elasticsearch_rack_middleware.rb:16:in `call'","lib/gitlab/middleware/sidekiq_shard_awareness_validation.rb:20:in `block in call'","lib/gitlab/sidekiq_sharding/validator.rb:42:in `enabled'","lib/gitlab/middleware/sidekiq_shard_awareness_validation.rb:20:in `call'","lib/gitlab/middleware/memory_report.rb:13:in `call'","lib/gitlab/middleware/speedscope.rb:13:in `call'","lib/gitlab/database/load_balancing/rack_middleware.rb:23:in `call'","lib/gitlab/middleware/rails_queue_duration.rb:33:in `call'","lib/gitlab/etag_caching/middleware.rb:21:in `call'","lib/gitlab/metrics/rack_middleware.rb:16:in `block in call'","lib/gitlab/metrics/web_transaction.rb:46:in `run'","lib/gitlab/metrics/rack_middleware.rb:16:in `call'","lib/gitlab/middleware/go.rb:21:in `call'","lib/gitlab/middleware/query_analyzer.rb:11:in `block in call'","lib/gitlab/database/query_analyzer.rb:83:in `within'","lib/gitlab/middleware/query_analyzer.rb:11:in `call'","lib/ci/job_token/middleware.rb:11:in `call'","batch-loader (2.0.5) lib/batch_loader/middleware.rb:11:in `call'","rack-attack (6.7.0) lib/rack/attack.rb:103:in `call'","apollo_upload_server (2.1.6) lib/apollo_upload_server/middleware.rb:19:in `call'","lib/gitlab/middleware/multipart.rb:173:in `call'","rack-attack (6.7.0) lib/rack/attack.rb:127:in `call'","warden (1.2.9) lib/warden/manager.rb:36:in `block in call'","warden (1.2.9) lib/warden/manager.rb:34:in `catch'","warden (1.2.9) lib/warden/manager.rb:34:in `call'","rack-cors (2.0.2) lib/rack/cors.rb:102:in `call'","rack (2.2.17) lib/rack/tempfile_reaper.rb:15:in `call'","rack (2.2.17) lib/rack/etag.rb:27:in `call'","rack (2.2.17) lib/rack/conditional_get.rb:27:in `call'","rack (2.2.17) lib/rack/head.rb:12:in `call'","actionpack (7.1.5.1) lib/action_dispatch/http/permissions_policy.rb:36:in `call'","actionpack (7.1.5.1) lib/action_dispatch/http/content_security_policy.rb:36:in `call'","lib/gitlab/middleware/read_only/controller.rb:50:in `call'","lib/gitlab/middleware/read_only.rb:18:in `call'","lib/gitlab/middleware/unauthenticated_session_expiry.rb:18:in `call'","rack (2.2.17) lib/rack/session/abstract/id.rb:266:in `context'","rack (2.2.17) lib/rack/session/abstract/id.rb:260:in `call'","lib/gitlab/middleware/secure_headers.rb:11:in `call'","actionpack (7.1.5.1) lib/action_dispatch/middleware/cookies.rb:689:in `call'","lib/gitlab/middleware/same_site_cookies.rb:27:in `call'","actionpack (7.1.5.1) lib/action_dispatch/middleware/callbacks.rb:29:in `block in call'","activesupport (7.1.5.1) lib/active_support/callbacks.rb:101:in `run_callbacks'","actionpack (7.1.5.1) lib/action_dispatch/middleware/callbacks.rb:28:in `call'","sentry-rails (5.23.0) lib/sentry/rails/rescued_exception_interceptor.rb:14:in `call'","actionpack (7.1.5.1) lib/action_dispatch/middleware/debug_exceptions.rb:29:in `call'","lib/gitlab/middleware/path_traversal_check.rb:40:in `call'","lib/gitlab/middleware/handle_malformed_strings.rb:21:in `call'","sentry-ruby (5.23.0) lib/sentry/rack/capture_exceptions.rb:30:in `block (2 levels) in call'","sentry-ruby (5.23.0) lib/sentry/hub.rb:299:in `with_session_tracking'","sentry-ruby (5.23.0) lib/sentry-ruby.rb:428:in `with_session_tracking'","sentry-ruby (5.23.0) lib/sentry/rack/capture_exceptions.rb:21:in `block in call'","sentry-ruby (5.23.0) lib/sentry/hub.rb:89:in `with_scope'","sentry-ruby (5.23.0) lib/sentry-ruby.rb:408:in `with_scope'","sentry-ruby (5.23.0) lib/sentry/rack/capture_exceptions.rb:20:in `call'","actionpack (7.1.5.1) lib/action_dispatch/middleware/show_exceptions.rb:31:in `call'","lib/gitlab/middleware/basic_health_check.rb:25:in `call'","lograge (0.11.2) lib/lograge/rails_ext/rack/logger.rb:15:in `call_app'","railties (7.1.5.1) lib/rails/rack/logger.rb:24:in `block in call'","activesupport (7.1.5.1) lib/active_support/tagged_logging.rb:139:in `block in tagged'","activesupport (7.1.5.1) lib/active_support/tagged_logging.rb:39:in `tagged'","activesupport (7.1.5.1) lib/active_support/tagged_logging.rb:139:in `tagged'","activesupport (7.1.5.1) lib/active_support/broadcast_logger.rb:241:in `method_missing'","railties (7.1.5.1) lib/rails/rack/logger.rb:24:in `call'","actionpack (7.1.5.1) lib/action_dispatch/middleware/remote_ip.rb:92:in `call'","lib/gitlab/middleware/handle_ip_spoof_attack_error.rb:25:in `call'","lib/gitlab/middleware/request_context.rb:15:in `call'","lib/gitlab/middleware/webhook_recursion_detection.rb:15:in `call'","request_store (1.7.0) lib/request_store/middleware.rb:19:in `call'","rack (2.2.17) lib/rack/method_override.rb:24:in `call'","rack (2.2.17) lib/rack/runtime.rb:22:in `call'","rack-timeout (0.7.0) lib/rack/timeout/core.rb:154:in `block in call'","rack-timeout (0.7.0) lib/rack/timeout/support/timeout.rb:19:in `timeout'","rack-timeout (0.7.0) lib/rack/timeout/core.rb:153:in `call'","config/initializers/fix_local_cache_middleware.rb:11:in `call'","lib/gitlab/middleware/compressed_json.rb:44:in `call'","actionpack (7.1.5.1) lib/action_dispatch/middleware/executor.rb:14:in `call'","lib/gitlab/middleware/rack_multipart_tempfile_factory.rb:19:in `call'","lib/gitlab/metrics/requests_rack_middleware.rb:83:in `call'","gitlab-labkit (0.39.0) lib/labkit/middleware/rack.rb:22:in `block in call'","gitlab-labkit (0.39.0) lib/labkit/context.rb:35:in `with_context'","gitlab-labkit (0.39.0) lib/labkit/middleware/rack.rb:21:in `call'","rack (2.2.17) lib/rack/sendfile.rb:110:in `call'","actionpack (7.1.5.1) lib/action_dispatch/middleware/request_id.rb:28:in `call'","lib/gitlab/middleware/sidekiq_web_static.rb:20:in `call'","railties (7.1.5.1) lib/rails/engine.rb:536:in `call'","railties (7.1.5.1) lib/rails/railtie.rb:226:in `public_send'","railties (7.1.5.1) lib/rails/railtie.rb:226:in `method_missing'","lib/gitlab/middleware/release_env.rb:12:in `call'","rack (2.2.17) lib/rack/urlmap.rb:74:in `block in call'","rack (2.2.17) lib/rack/urlmap.rb:58:in `each'","rack (2.2.17) lib/rack/urlmap.rb:58:in `call'","puma (6.6.0) lib/puma/configuration.rb:279:in `call'","puma (6.6.0) lib/puma/request.rb:99:in `block in handle_request'","puma (6.6.0) lib/puma/thread_pool.rb:390:in `with_force_shutdown'","puma (6.6.0) lib/puma/request.rb:98:in `handle_request'","puma (6.6.0) lib/puma/server.rb:472:in `process_client'","puma (6.6.0) lib/puma/server.rb:254:in `block in run'","puma (6.6.0) lib/puma/thread_pool.rb:167:in `block in spawn_thread'"],"db_duration_s":0.00091,"view_duration_s":0.0,"duration_s":0.02259}
gitlab         | {"backend_id":"rails","body_limit":104857600,"content_type":"text/html; charset=utf-8","correlation_id":"01K0F123AHQ96EA55NPN0BW2QJ","duration_ms":38,"host":"localhost:80","level":"info","method":"GET","msg":"access","proto":"HTTP/1.1","read_bytes":1442,"referrer":"","remote_addr":"127.0.0.1:0","remote_ip":"172.18.0.1","route":"","route_id":"default","status":500,"system":"http","time":"2025-07-18T15:04:50Z","ttfb_ms":38,"uri":"/search?scope=projects\u0026search=747","user_agent":"Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:140.0) Gecko/20100101 Firefox/140.0","written_bytes":1624}
Edited by Dmitry Gruzd