Hướng dẫn cấu hình Quickwit - Công cụ tìm kiếm phân tán viết bằng Rust

Cấu hình Node (Node Configuration)

Cấu hình node cho phép tùy chỉnh và tối ưu hóa cài đặt cho từng node trong cluster. Nó được chia thành các phần sau:

  • Cấu hình chung (Common configuration): Thuộc tính cấp cao được chia sẻ
  • Cấu hình Storage: Được định nghĩa trong phần storage
  • Cấu hình Metastore: Được định nghĩa trong phần metastore
  • Cấu hình Ingest: Được định nghĩa trong phần ingest_api
  • Cấu hình Indexer: Được định nghĩa trong phần indexer
  • Cấu hình Searcher: Được định nghĩa trong phần searcher
  • Cấu hình Jaeger: Được định nghĩa trong phần jaeger

File cấu hình mẫu có thể được tìm thấy tại: quickwit.yaml.

Cấu hình chung (Common Configuration)

Thuộc tínhMô tảBiến môi trườngGiá trị mặc định
versionPhiên bản file cấu hình. 0.7 là giá trị duy nhất khả dụng và tương thích ngược với phiên bản 0.5 và 0.4.
cluster_idĐịnh danh duy nhất của cluster mà node sẽ tham gia. Các cluster chia sẻ cùng mạng nên sử dụng cluster ID khác nhau.QW_CLUSTER_IDquickwit-default-cluster
node_idĐịnh danh duy nhất của node. Phải khác với định danh của các node khác trong cluster. Nếu không được đặt, mặc định là tên host ngắn của instance.QW_NODE_IDTên host ngắn
enabled_servicesCác dịch vụ được kích hoạt (control plane, indexer, janitor, metastore, searcher)QW_ENABLED_SERVICESTất cả dịch vụ
listen_addressĐịa chỉ IP hoặc tên host mà Quickwit sẽ liên kết để khởi động máy chủ REST và gRPC, đồng thời kết nối node này với các node khác. Mặc định là 127.0.0.1 (localhost). Khi cố gắng hình thành cluster, giá trị mặc định này không có hiệu lực.QW_LISTEN_ADDRESS127.0.0.1
advertise_addressĐịa chỉ IP được quảng bá bởi node, tức là địa chỉ mà các node peer sử dụng để kết nối với node này cho các cuộc gọi thủ tục từ xa.QW_ADVERTISE_ADDRESSlisten_address
gossip_listen_portCổng lắng nghe dịch vụ thành viên cluster Gossip (UDP).QW_GOSSIP_LISTEN_PORTrest.listen_port
grpc_listen_portCổng mà dịch vụ gRPC lắng nghe lưu lượng.QW_GRPC_LISTEN_PORTrest.listen_port + 1
peer_seedsDanh sách địa chỉ IP hoặc tên host dùng để khởi tạo cluster và khám phá toàn bộ tập hợp node. Danh sách này có thể chứa địa chỉ của node hiện tại và không cần phải đầy đủ. Nếu peer_seeds chứa tên host, Quickwit sẽ phân giải nó bằng cách truy vấn DNS mỗi phút.QW_PEER_SEEDS
data_dirĐường dẫn thư mục để lưu trữ dữ liệu liên tục (dữ liệu tạm thời, slice dùng để cache). Chủ yếu được sử dụng cho các hoạt động lập chỉ mục.QW_DATA_DIR./qwdata
metastore_uriURI metastore. Có thể là thư mục cục bộ hoặc s3://my-bucket/indexes hoặc postgres://username:password@localhost:5432/metastore.QW_METASTORE_URI{data_dir}/indexes
default_index_root_uriURI gốc index mặc định xác định vị trí lưu trữ dữ liệu index (splits). URI index được xây dựng theo mẫu: {default_index_root_uri}/{index-id}QW_DEFAULT_INDEX_ROOT_URI{data_dir}/indexes
Chỉ biến môi trườngCấp độ log của Quickwit. Có thể là cấp độ log trực tiếp hoặc danh sách module_name=level cách nhau bằng dấu phẩy.RUST_LOGinfo

Cấu hình REST (REST Configuration)

Phần này chứa các tùy chọn cấu hình cho REST API.

Thuộc tínhMô tảBiến môi trườngGiá trị mặc định
listen_portCổng mà REST API lắng nghe lưu lượng HTTP.QW_REST_LISTEN_PORT7280
cors_allow_originsCấu hình nguồn gốc CORS được phép truy cập API.
extra_headersDanh sách tên header và giá trị

Cấu hình CORS (Configuring CORS)

CORS (Cross-Origin Resource Sharing) mô tả địa chỉ hoặc nguồn gốc nào có thể truy cập REST API từ trình duyệt. Theo mặc định, không cho phép chia sẻ tài nguyên giữa các nguồn gốc.

Có thể chỉ định ký tự đại diện, một nguồn gốc hoặc nhiều nguồn gốc trong tham số cors_allow_origins:

rest:
  listen_port: 1789
  extra_headers:
    x-header-1: header-value-1
    x-header-2: header-value-2
  cors_allow_origins: '*'

Cấu hình gRPC (gRPC Configuration)

Phần này chứa các tùy chọn cấu hình cho dịch vụ gRPC và máy khách được sử dụng cho giao tiếp nội bộ giữa các node.

Thuộc tínhMô tảBiến môi trườngGiá trị mặc định
max_message_sizeKích thước tối đa (byte) của thông báo được trao đổi giữa máy khách và dịch vụ gRPC nội bộ.20 MiB

Ví dụ cấu hình gRPC:

grpc:
  max_message_size: 30 MiB

Chúng tôi khuyên bạn chỉ nên thay đổi giá trị mặc định 20 MiB khi gặp lỗi: Error, message length too large: found 24732228 bytes, the limit is: 20971520 bytes. Trong trường hợp này, hãy tăng dần max_message_size, mỗi lần 10 MiB, cho đến khi sự cố biến mất.

Cấu hình Storage (Storage Configuration)

Tham khảo trang Cấu hình Storage chuyên dụng để biết thêm thông tin về cách cấu hình Quickwit cho các nhà cung cấp storage khác nhau.

Dưới đây là các ví dụ tối thiểu về cách cấu hình Quickwit với Amazon S3 hoặc Alibaba OSS:

Amazon S3

storage:
  s3:
    region: us-east-1

Alibaba

storage:
  s3:
    region: us-east-1
    endpoint: https://oss-us-east-1.aliyuncs.com

Cấu hình Metastore (Metastore Configuration)

Phần này có thể chứa một phần con cấu hình cho mỗi implementation metastore khả dụng. Các tham số cấu hình cụ thể cho từng implementation có thể khác nhau. Currently available metastore implementations include:

  • File-backed
  • PostgreSQL

Cấu hình File-backed Metastore

File-backed metastore không có cấu hình cấp node. Bạn có thể cấu hình khoảng thời gian polling ở cấp index.

Cấu hình PostgreSQL Metastore

Thuộc tínhMô tảGiá trị mặc định
min_connectionsSố kết nối tối thiểu luôn được duy trì trong pool.0
max_connectionsSố kết nối tối đa được duy trì trong pool.10
acquire_connection_timeoutThời gian tối đa chờ kết nối khả dụng trước khi từ bỏ truy vấn.10s
idle_connection_timeoutThời gian nhàn rỗi tối đa trước khi đóng một kết nối.10min
max_connection_lifetimeVòng đời tối đa của một kết nối.30min

Ví dụ cấu hình PostgreSQL metastore ở định dạng YAML:

metastore:
  postgres:
    min_connections: 10
    max_connections: 50
    acquire_connection_timeout: 30s
    idle_connection_timeout: 1h
    max_connection_lifetime: 1d

Cấu hình Indexer (Indexer Configuration)

Phần này chứa các tùy chọn cấu hình cho indexer. Split store được mô tả chi tiết trong Indexing documents.

Thuộc tínhMô tảGiá trị mặc định
split_store_max_num_bytesSố byte tối đa được phép trong split store.100G
split_store_max_num_splitsSố lượng split tối đa được phép trong split store.1000
max_concurrent_split_uploadsSố lượng upload split đồng thời tối đa được phép trên một node.12
merge_concurrencySố lượng thao tác merge tối đa có thể thực hiện đồng thời trên một node.(2 x số luồng khả dụng) / 3
enable_otlp_endpointNếu true, kích hoạt endpoint xuất OpenTelemetry để nhận log và traces qua OpenTelemetry Protocol (OTLP).false
cpu_capacityTham số tư vấn được sử dụng bởi control plane. Giá trị có thể được biểu thị bằng luồng (ví dụ: 2) hoặc millicpus (ví dụ: 2000m). Control plane sẽ cố gắng lên lịch các indexing pipeline theo tỷ lệ trên các node khác nhau dựa trên dung lượng CPU được khai báo.Số luồng khả dụng

Ví dụ:

indexer:
  split_store_max_num_bytes: 100G
  split_store_max_num_splits: 1000
  max_concurrent_split_uploads: 12
  enable_otlp_endpoint: true

Cấu hình Ingest API (Ingest API Configuration)

Thuộc tínhMô tảGiá trị mặc định
max_queue_memory_usageKích thước tối đa (byte) của hàng đợi Ingest trong bộ nhớ.2GiB
max_queue_disk_usageDung lượng đĩa tối đa (byte) mà hàng đợi Ingest có thể chiếm. Kích thước tối thiểu ít nhất là 256M và ít nhất là max_queue_memory_usage.4GiB

Ví dụ:

ingest_api:
  max_queue_memory_usage: 2GiB
  max_queue_disk_usage: 4GiB

Cấu hình Searcher (Searcher Configuration)

Phần này chứa các tùy chọn cấu hình cho searcher.

Thuộc tínhMô tảGiá trị mặc định
aggregation_memory_limitKiểm soát lượng bộ nhớ tối đa có thể sử dụng trước giai đoạn tổng hợp. Giới hạn này áp dụng cho mỗi yêu cầu và mỗi truy vấn leaf.500M
aggregation_bucket_limitXác định số lượng bucket tối đa được trả về cho máy khách.65000
fast_field_cache_capacityDung lượng cache bộ nhớ fast field trên searcher.1G
split_footer_cache_capacityDung lượng cache bộ nhớ split footer trên searcher (về cơ bản là hot cache).500M
partial_request_cache_capacityDung lượng cache bộ nhớ yêu cầu một phần trên searcher.64M
max_num_concurrent_split_searchesSố lượng yêu cầu tìm kiếm split đồng thời tối đa chạy trên searcher.100
max_num_concurrent_split_streamsSố lượng yêu cầu stream split đồng thời tối đa chạy trên searcher.100
split_cacheCác tùy chọn cấu hình cache split của searcher được định nghĩa bên dưới. Nếu không được chỉ định, cache sẽ bị vô hiệu hóa.

Cấu hình Split Cache Searcher (Searcher Split Cache Configuration)

Phần này chứa các tùy chọn cấu hình cho split cache trên đĩa của searcher.

Thuộc tínhMô tảGiá trị mặc định
max_num_bytesKích thước đĩa tối đa được phép trong split cache.
max_num_splitsSố lượng split tối đa được phép trong split cache.10000
num_concurrent_downloadsSố lượng tải xuống split đồng thời tối đa.1

Ví dụ:

searcher:
  fast_field_cache_capacity: 1G
  split_footer_cache_capacity: 500M
  partial_request_cache_capacity: 64M
  split_cache:
    max_num_bytes: 1G
    max_num_splits: 10000
    num_concurrent_downloads: 1

Cấu hình Jaeger (Jaeger Configuration)

Thuộc tínhMô tảGiá trị mặc định
enable_endpointNếu true, kích hoạt endpoint gRPC cho phép dịch vụ truy vấn Jaeger kết nối và truy xuất traces.false

Ví dụ:

searcher:
  enable_endpoint: true

Sử dụng biến môi trường trong cấu hình (Using Environment Variables in Configuration)

Bạn có thể sử dụng tham chiếu biến môi trường trong tệp cấu hình để đặt các giá trị cần được cấu hình trong quá trình triển khai. Để làm điều này, hãy sử dụng:

${VAR_NAME}

Mỗi tham chiếu biến sẽ được thay thế bằng giá trị của biến môi trường khi khởi động. Việc thay thế có phân biệt chữ hoa chữ thường và xảy ra trước khi phân tích cú pháp tệp cấu hình. Tham chiếu đến một biến chưa được xác định sẽ báo lỗi, trừ khi bạn chỉ định giá trị mặc định hoặc văn bản lỗi tùy chỉnh.

Để chỉ định giá trị mặc định, hãy sử dụng:

${VAR_NAME:-default_value}

<config_field>: ${VAR_NAME}
hoặc
<config_field>: ${VAR_NAME:-default value}

Ví dụ:

export QW_LISTEN_ADDRESS=0.0.0.0
# config.yaml
version: 0.7
cluster_id: quickwit-cluster
node_id: my-unique-node-id
listen_address: ${QW_LISTEN_ADDRESS}
rest:
  listen_port: ${QW_LISTEN_PORT:-1111}

Sẽ được Quickwit hiểu là:

version: 0.7
cluster_id: quickwit-cluster
node_id: my-unique-node-id
listen_address: 0.0.0.0
rest:
  listen_port: 1111

Cấu hình Storage (Storage Configuration)

Các nhà cung cấp Storage được hỗ trợ (Supported Storage Providers)

Quickwit hiện hỗ trợ bốn loại nhà cung cấp storage:

  • Amazon S3 và S3-compatible (Garage, MinIO, v.v.)
  • Azure Blob Storage
  • Local file storage
  • Google Cloud Storage (native API)

URI Storage (Storage URIs)

URI storage xác định các nhà cung cấp storage khác nhau thông qua "giao thức" hoặc "scheme" của URI. Quickwit hỗ trợ các giao thức URI storage sau:

  • s3:// cho Amazon S3 và S3-compatible
  • azure:// cho Azure Blob Storage
  • file:// cho hệ thống tệp cục bộ
  • gs:// cho Google Cloud Storage

URI Storage tệp cục bộ (Local File Storage URIs)

Quickwit diễn giải các đường dẫn tệp thông thường dưới dạng URI hệ thống tệp cục bộ. Cho phép sử dụng đường dẫn tệp tương đối, chúng sẽ được phân giải tương ứng với thư mục làm việc hiện tại (CWD). Có thể sử dụng ~ như một phím tắt để tham chiếu đến thư mục home của người dùng. Dưới đây là các URI hệ thống tệp cục bộ hợp lệ:

- /var/quickwit
- file:///var/quickwit
- /home/quickwit/data
- ~/data
- ./quickwit

Cấu hình Storage (Storage Configuration)

Phần này chứa một phần con cấu hình cho mỗi nhà cung cấp storage. Nếu không đặt tham số cấu hình storage một cách rõ ràng, Quickwit dựa vào các giá trị mặc định do SDK của nhà cung cấp storage cung cấp.

Cấu hình Storage S3 (S3 Storage Configuration)

Thuộc tínhMô tảGiá trị mặc định
flavorFlavor storage tùy chọn. Các flavor có sẵn bao gồm digital_ocean, garage, gcsminio.
access_key_idAWS access key ID.
secret_access_keyAWS secret access key.
regionVùng AWS nơi gửi yêu cầu.us-east-1 (mặc định SDK)
endpointEndpoint tùy chỉnh được sử dụng với nhà cung cấp S3-compatible.Mặc định SDK
force_path_style_accessVô hiệu hóa các yêu cầu kiểu virtual-hosted. Một số nhà cung cấp S3-compatible (Ceph, MinIO) yêu cầu sử dụng.false
disable_multi_object_deleteVô hiệu hóa các yêu cầu xóa nhiều đối tượng. Một số nhà cung cấp S3-compatible (GCS) yêu cầu sử dụng.false
disable_multipart_uploadVô hiệu hóa tải lên đa phần. Một số nhà cung cấp S3-compatible (GCS) yêu cầu sử dụng.false

Việc mã hóa cứng thông tin xác thực trong tệp cấu hình là không an toàn và không được khuyến khích.

Biến môi trường (Environment Variables)
Biến môi trườngMô tả
QW_S3_ENDPOINTEndpoint S3 tùy chỉnh.
QW_S3_MAX_CONCURRENCYGiới hạn số lượng yêu cầu đồng thời đến S3.
Storage Flavors

Storage flavors đảm bảo Quickwit hoạt động chính xác với các nhà cung cấp storage khác với S3 API bằng cách tự động cấu hình các cài đặt thích hợp. Các flavor có sẵn bao gồm:

  • digital_ocean
  • garage
  • gcs
  • minio

Ví dụ cấu hình storage cho Google Cloud Storage ở định dạng YAML:

storage:
  s3:
    flavor: gcs
    region: us-east1
    endpoint: https://storage.googleapis.com

Cấu hình Storage Azure (Azure Storage Configuration)

Thuộc tínhMô tảGiá trị mặc định
accountTên tài khoản Azure Storage.
access_keyKhóa truy cập tài khoản Azure Storage.
Biến môi trường (Environment Variables)
Biến môi trườngMô tả
QW_AZURE_STORAGE_ACCOUNTTên tài khoản Azure Blob Storage.
QW_AZURE_STORAGE_ACCESS_KEYKhóa truy cập tài khoản Azure Blob Storage.

Ví dụ cấu hình storage cho Azure ở định dạng YAML:

storage:
  azure:
    account: your-azure-account-name
    access_key: your-azure-access-key

Ví dụ cấu hình Storage cho các nhà cung cấp object storage khác nhau

Garage

storage:
  s3:
    flavor: garage
    endpoint: http://127.0.0.1:3900

MinIO

storage:
  s3:
    flavor: minio
    endpoint: http://127.0.0.1:9000

Cấu hình Index (Index Configuration)

Trang này mô tả cách cấu hình một index.

Ngoài index_id, cấu hình index cho phép bạn xác định năm mục:

  • index-uri: Xác định vị trí lưu trữ các tệp index.
  • Doc mapping: Xác định cách một tài liệu và các trường của nó được lưu trữ và lập chỉ mục cho một index nhất định.
  • Index settings: Xác định trường timestamp cho phân đoạn và một số tham số nâng cao hơn như merge strategy.
  • Search settings: Xác định trường tìm kiếm mặc định default_search_fields.
  • Retention policy: Xác định khoảng thời gian Quickwit nên giữ lại dữ liệu đã được lập chỉ mục.

Cấu hình được đặt khi tạo index và có thể được thay đổi bằng update endpoint hoặc CLI.

Định dạng tệp Cấu hình (Config File Format)

Định dạng cấu hình index là YAML. Khi một khóa bị thiếu trong tệp cấu hình, giá trị mặc định sẽ được sử dụng. Dưới đây là một ví dụ đầy đủ áp dụng cho tập dữ liệu log HDFS:

version: 0.7

index_id: "hdfs"

index_uri: "s3://my-bucket/hdfs"

doc_mapping:
  mode: lenient
  field_mappings:
    - name: timestamp
      type: datetime
      input_formats:
        - unix_timestamp
      output_format: unix_timestamp_secs
      fast_precision: seconds
      fast: true
    - name: severity_text
      type: text
      tokenizer: raw
      fast:
        - tokenizer: lowercase
    - name: body
      type: text
      tokenizer: default
      record: position
    - name: resource
      type: object
      field_mappings:
        - name: service
          type: text
          tokenizer: raw
  tag_fields: ["resource.service"]
  timestamp_field: timestamp
  index_field_presence: true

search_settings:
  default_search_fields: [severity_text, body]

retention:
  period: 90 days
  schedule: daily

ID Index (Index ID)

ID Index là một chuỗi dùng để xác định duy nhất index trong metastore. Nó chỉ có thể chứa các chữ cái ASCII hoa hoặc thường, số, dấu gạch ngang (-) và dấu gạch dưới (_). Nó phải bắt đầu bằng một chữ cái và chứa ít nhất 3 ký tự nhưng không quá 255 ký tự.

URI Index (Index URI)

URI Index xác định vị trí lưu trữ các tệp index (còn được gọi là split). Tham số này mong đợi một storage URI.

Tham số index-uri là tùy chọn. Theo mặc định, index-uri được tính bằng cách nối index-id với default_index_root_uri được xác định trong cấu hình Quickwit.

Doc Mapping (Doc Mapping)

Doc mapping xác định cách một tài liệu và các trường của nó được lưu trữ và lập chỉ mục cho một index nhất định. Một tài liệu là một tập hợp các trường có tên, mỗi trường có kiểu dữ liệu riêng (text, byte, datetime, bool, i64, u64, f64, IP, JSON).

BiếnMô tảGiá trị mặc định
field_mappingsTập hợp các field mapping, mỗi mapping có kiểu dữ liệu riêng.[]
modeXác định cách Quickwit xử lý các trường tài liệu không có trong field_mappings.dynamic
dynamic_mappingChỉ được phép khi mode được đặt thành dynamic. Xác định xem các trường được ánh xạ động có nên được lập chỉ mục, lưu trữ, v.v.
tag_fieldsTập hợp các trường đã được xác định trong field_mappings sẽ được lưu trữ dưới dạng một phần của metadata tags.[]
store_sourceTài liệu JSON gốc có được lưu trữ trong index hay không.false
timestamp_fieldTrường datetime được sử dụng để phân đoạn tài liệu. Trường này phải thuộc loại datetime.None
partition_keyNếu được đặt, Quickwit sẽ định tuyến tài liệu đến các split khác nhau dựa trên tên trường được khai báo là partition_key.null
max_num_partitionsGiới hạn số lượng split được tạo thông qua phân vùng.200
index_field_presenceTự động kích hoạt truy vấn exists cho fast fields.false

Kiểu trường (Field Types)

Mỗi trường có một kiểu cho biết loại dữ liệu mà nó chứa. Quickwit hỗ trợ các kiểu nguyên thủy sau: text, i64, u64, f64, datetime, bool, ip, bytesjson, cũng như các kiểu tổng hợp như array và object.

Kiểu Text (Text Type)

Trường này là trường văn bản, được phân tích và chia thành các token trước khi lập chỉ mục. Loại trường này phù hợp cho tìm kiếm toàn văn.

Tham số trường Text:

BiếnMô tảGiá trị mặc định
descriptionMô tả tùy chọn của trường.None
storedGiá trị có được lưu trữ trong document store không.true
indexedGiá trị có nên được lập chỉ mục để có thể tìm kiếm không.true
tokenizerTên của Tokenizer.default
recordMô tả lượng thông tin của index, có thể chọn basic, freqposition.basic
fieldnormsCó lưu trữ field norm cho trường hay không.false
fastGiá trị có được lưu trữ trong fast field không.false

Mô tả các Tokenizer có sẵn:

TokenizerMô tả
rawKhông xử lý cũng không tokenize văn bản. Lọc các token lớn hơn 255 byte.
raw_lowercaseKhông tokenize văn bản, nhưng chuyển đổi nó thành chữ thường. Lọc các token lớn hơn 255 byte.
defaultPhân tách văn bản dựa trên khoảng trắng và dấu câu, loại bỏ các token quá dài và chuyển đổi thành chữ thường.
en_stemTương tự như default, nhưng cũng áp dụng stemming cho các token kết quả.
whitespaceChỉ phân tách văn bản dựa trên khoảng trắng.
chinese_compatibleNgoài các thao tác do default thực hiện, còn phân tách giữa các ký tự CJK.
lowercaseÁp dụng chuyển đổi chữ thường cho văn bản. Nó không tokenize văn bản.

Mô tả các Normalizer có sẵn:

NormalizerMô tả
rawKhông xử lý cũng không tokenize văn bản. Lọc các token lớn hơn 255 byte.
lowercaseÁp dụng chuyển đổi chữ thường cho văn bản. Lọc các token lớn hơn 255 byte.

Mô tả các Record Options:

Record OptionMô tả
basicChỉ ghi lại DocId.
freqGhi lại ID tài liệu và tần số thuật ngữ.
positionGhi lại ID tài liệu, tần số thuật ngữ và vị trí xuất hiện.
Kiểu Numeric: i64, u64 và f64 (Numeric Types: i64, u64 and f64)

Quickwit hỗ trợ ba kiểu numeric: i64, u64f64.

Ví dụ field mapping cho u64:

name: rating
description: Score between 0 and 5
type: u64
stored: true
indexed: true
fast: true

Tham số trường Numeric (i64, u64f64):

BiếnMô tảGiá trị mặc định
descriptionMô tả tùy chọn của trường.None
storedGiá trị trường có được lưu trữ trong document store không.true
indexedGiá trị trường có được lập chỉ mục không.true
fastGiá trị trường có được lưu trữ trong fast field không.false
coerceCó chuyển đổi số được truyền dưới dạng chuỗi thành integer hoặc float không.true
output_formatKiểu JSON được sử dụng để trả về số trong kết quả tìm kiếm. Các giá trị khả dụng là number hoặc string.number
Kiểu Datetime (Datetime Type)

Kiểu datetime xử lý ngày và datetime. Các loại đầu vào được hỗ trợ bao gồm:

  • Float hoặc integer đại diện cho Unix timestamp
  • Chuỗi chứa ngày, datetime hoặc Unix timestamp đã được định dạng

Tham số trường input_formats chỉ định các định dạng ngày được chấp nhận. Các định dạng đầu vào sau được hỗ trợ gốc:

  • iso8601
  • rfc2822
  • rfc3339
  • strptime
  • unix_timestamp

Ví dụ field mapping cho datetime:

name: timestamp
type: datetime
description: Time at which the event was emitted
input_formats:
  - rfc3339
  - unix_timestamp
  - "%Y %m %d %H:%M:%S.%f %z"
output_format: unix_timestamp_secs
stored: true
indexed: true
fast: true
fast_precision: milliseconds

Tham số trường Datetime:

BiếnMô tảGiá trị mặc định
input_formatsĐịnh dạng để phân tích cú pháp ngày đầu vào.\[rfc3339, unix_timestamp\]
output_formatĐịnh dạng để hiển thị ngày trong kết quả tìm kiếm.rfc3339
storedGiá trị trường có được lưu trữ trong document store không.true
indexedGiá trị trường có được lập chỉ mục không.true
fastGiá trị trường có được lưu trữ trong fast field không.false
fast_precisionĐộ chính xác được sử dụng để lưu trữ giá trị fast (seconds, milliseconds, microseconds hoặc nanoseconds).seconds
Kiểu Bool (Bool Type)

Ví dụ field mapping cho bool:

name: is_active
description: Activation status
type: bool
stored: true
indexed: true
fast: true

Tham số trường Bool:

BiếnMô tảGiá trị mặc định
descriptionMô tả tùy chọn của trường.None
storedGiá trị có được lưu trữ trong document store không.true
indexedGiá trị có được lập chỉ mục không.true
fastGiá trị có được lưu trữ trong fast field không.false
Kiểu IP (IP Type)

Ví dụ field mapping cho ip:

name: host_ip
description: Host IP address
type: ip
fast: true

Tham số trường IP:

BiếnMô tảGiá trị mặc định
descriptionMô tả tùy chọn của trường.None
storedGiá trị có được lưu trữ trong document store không.true
indexedGiá trị có được lập chỉ mục không.true
fastGiá trị có được lưu trữ trong fast field không.false
Kiểu Bytes (Bytes Type)

Ví dụ field mapping cho bytes:

name: binary
type: bytes
stored: true
indexed: true
fast: true
input_format: hex
output_format: hex

Tham số trường Bytes:

BiếnMô tảGiá trị mặc định
descriptionMô tả tùy chọn của trường.None
storedGiá trị có được lưu trữ trong document store không.true
indexedGiá trị có được lập chỉ mục không.true
fastGiá trị có được lưu trữ trong fast field không.false
input_formatMã hóa được sử dụng để biểu diễn dữ liệu nhị phân đầu vào, có thể là hex hoặc base64.base64
output_formatMã hóa được sử dụng để biểu diễn dữ liệu nhị phân trong kết quả tìm kiếm, có thể là hex hoặc base64.base64
Kiểu JSON (JSON Type)

Ví dụ field mapping cho json:

name: parameters
type: json
stored: true
indexed: true
tokenizer: raw
expand_dots: false
fast:
  normalizer: lowercase

Tham số trường JSON:

BiếnMô tảGiá trị mặc định
descriptionMô tả tùy chọn của trường.None
storedGiá trị có được lưu trữ trong document store không.true
indexedGiá trị có được lập chỉ mục không.true
fastGiá trị có được lưu trữ trong fast field không.true
tokenizerTên của Tokenizer, có thể chọn raw, default, en_stemchinese_compatible.raw
recordMô tả lượng thông tin của index, có thể chọn basic, freqposition.basic
expand_dotsNếu đúng, các khóa JSON chứa . sẽ được mở rộng.true

Kiểu tổng hợp (Composite Types)

Array (Array)

Quickwit hỗ trợ array cho tất cả các kiểu nguyên thủy (ngoại trừ kiểu object). Để khai báo một array kiểu i64 trong cấu hình index, chỉ cần đặt type thành array<i64>.

Object (Object)
name: resource
type: object
field_mappings:
  - name: service
    type: text
Concatenate (Concatenate)
name: my_default_field
type: concatenate
concatenated_fields:
  - text
  - resource.author
include_dynamic_fields: true
tokenizer: default
record: basic

Chế độ (Mode)

Quickwit cung cấp ba chế độ khác nhau:

  • dynamic (mặc định): Các trường chưa được ánh xạ sẽ được Quickwit thu thập và xử lý theo cách được xác định trong tham số dynamic_mapping.
  • lenient: Quickwit sẽ bỏ qua các trường chưa được ánh xạ.
  • strict: Nếu tài liệu chứa các trường chưa được ánh xạ, Quickwit sẽ bỏ qua tài liệu đó và tính nó là một lỗi.
Dynamic Mapping (Dynamic Mapping)

Chế độ dynamic cho phép chạy Quickwit ở chế độ không có lược đồ hoặc có lược đồ một phần. Cấu hình của chế độ dynamic có thể được đặt thông qua tham số dynamic_mapping, mặc định là:

version: 0.7
index_id: my-dynamic-index
doc_mapping:
  mode: dynamic
  dynamic_mapping:
    indexed: true
    stored: true
    tokenizer: default
    record: basic
    expand_dots: true
    fast: true

Quy tắc xác thực tên trường (Field Name Validation Rules)

Quickwit chỉ chấp nhận tên trường khớp với biểu thức chính quy sau: ^[@$_\-a-zA-Z][@$_/\.\-a-zA-Z0-9]{0,254}$

Hành vi với giá trị null hoặc trường bị thiếu (Behavior with null values or missing fields)

Các giá trị null hoặc trường bị thiếu trong tài liệu JSON sẽ được bỏ qua một cách im lặng khi lập chỉ mục.

Cài đặt Index (Indexing Settings)

BiếnMô tảGiá trị mặc định
commit_timeout_secsSố giây tối đa để commit một split kể từ khi tạo.60
split_num_docs_targetSố lượng tài liệu mục tiêu trên mỗi split.10000000
merge_policyMô tả chiến lược được sử dụng để kích hoạt các thao tác merge split.
resources.heap_sizeKích thước heap của indexer cho mỗi nguồn trên mỗi index.2000000000
docstore_compression_levelMức nén zstd được sử dụng trong docstore.8
docstore_blocksizeKích thước của khối trong docstore, tính bằng byte.1000000

Merge Policies (Merge Policies)

"Stable log" merge policy:

indexing_settings:
  merge_policy:
    type: "stable_log"
    min_level_num_docs: 100000
    merge_factor: 10
    max_merge_factor: 12
    maturation_period: 48h

"Limit Merge" merge policy:

indexing_settings:
  merge_policy:
    type: "limit_merge"
    max_merge_ops: 5
    merge_factor: 10
    max_merge_factor: 12
    maturation_period: 48h

No merge:

indexing_settings:
    merge_policy:
        type: "no_merge"

Sử dụng bộ nhớ Indexer (Indexer Memory Usage)

Indexer sử dụng 2 GiB heap memory theo mặc định.

Cài đặt Tìm kiếm (Search Settings)

BiếnMô tảGiá trị mặc định
default_search_fieldsDanh sách các trường mặc định được sử dụng để tìm kiếm.None

Retention Policy (Retention Policy)

retention:
  period: 90 days
  schedule: daily
BiếnMô tảGiá trị mặc định
periodKhoảng thời gian sau đó split sẽ bị xóa.Bắt buộc
scheduleTần suất chính sách lưu giữ được đánh giá và áp dụng.hourly

Cấu hình Metastore (Metastore Configuration)

Quickwit cần một nơi để lưu trữ thông tin meta về các index của nó. Metastore được xác định hoàn toàn bằng một URI. Có thể đặt nó bằng cách chỉnh sửa tham số metastore_uri trong node configuration file (thường có tên là quickwit.yaml).

Quickwit cung cấp hai implementation:

  • PostgreSQL: Được khuyến nghị cho sử dụng phân tán.
  • File-backed implementation.

PostgreSQL Metastore (PostgreSQL Metastore)

Cấu hình PostgreSQL metastore bằng cách đặt URI PostgreSQL trong tham số metastore_uri trong tệp cấu hình Quickwit. URI có định dạng:

postgres://[user]:[password]@[host]:[port]/[dbname]

Các URI PostgreSQL hợp lệ:

postgres://localhost/mydb
postgres://user@localhost
postgres://user:secret@localhost
postgres://host1:123,host2:456/mydb

File-backed Metastore (File-backed Metastore)

s3://my-indexes
s3://quickwit/my-indexes
s3://quickwit/my-indexes#polling_interval=30s
file:///local/indices
file:///local/indices#polling_interval=30s
/local/indices
./quickwit-metastores

Cấu hình Polling (Polling Configuration)

Có thể cấu hình file-backed metastore để định kỳ polling để duy trì chế độ xem cập nhật. Để cấu hình khoảng thời gian polling (tính bằng giây), hãy thêm URI fragment vào storage URI: s3://quickwit/my-indexes#polling_interval=30s. Chỉ có thể cấu hình polling interval bằng giây.

Cấu hình Source (Source Configuration)

Quickwit có thể đưa dữ liệu vào index từ một hoặc nhiều source. Có thể thêm source sau khi tạo index bằng lệnh CLI quickwit source create. Cũng có thể kích hoạt hoặc vô hiệu hóa source bằng các lệnh con quickwit source enable/disable.

ID Source (Source ID)

ID Source là một chuỗi dùng để xác định duy nhất source trong index. Nó chỉ có thể chứa các chữ cái ASCII hoa hoặc thường, số, dấu gạch ngang (-) và dấu gạch dưới (_). Nó phải bắt đầu bằng một chữ cái và chứa ít nhất 3 ký tự, nhưng không quá 255.

Loại Source (Source Type)

Các loại source có sẵn: ingest-api, kafka, kinesispulsar. Loại file cũng được hỗ trợ, nhưng chỉ dùng để ingest cục bộ từ CLI.

Tham số Source (Source Parameters)

File Source (File Source)

Ingest một file cụ thể (CLI only):

./quickwit tool local-ingest --index <index> --input-path <input-path>

Notification based file ingestion (beta):

cat << EOF > source-config.yaml
version: 0.8
source_id: my-sqs-file-source
source_type: file
num_pipelines: 2
params:
  notifications:
    - type: sqs
      queue_url: https://sqs.us-east-1.amazonaws.com/123456789012/queue-name
      message_type: s3_notification
EOF
./quickwit source create --index my-index --source-config source-config.yaml

Ingest API Source (Ingest API Source)

Ingest API source đọc dữ liệu từ Ingest API. Source này được tạo tự động khi tạo index và không thể xóa hoặc vô hiệu hóa.

Kafka Source (Kafka Source)

cat << EOF > source-config.yaml
version: 0.8
source_id: my-kafka-source
source_type: kafka
num_pipelines: 2
params:
  topic: my-topic
  client_params:
    bootstrap.servers: localhost:9092
    security.protocol: SSL
EOF
./quickwit source create --index my-index --source-config source-config.yaml

Kinesis Source (Kinesis Source)

cat << EOF > source-config.yaml
version: 0.7
source_id: my-kinesis-source
source_type: kinesis
params:
  stream_name: my-stream
EOF
quickwit source create --index my-index --source-config source-config.yaml

Pulsar Source (Pulsar Source)

cat << EOF > source-config.yaml
version: 0.7
source_id: my-pulsar-source
source_type: pulsar
params:
  topics:
    - my-topic
  address: pulsar://localhost:6650
EOF
./quickwit source create --index my-index --source-config source-config.yaml

Số lượng Pipeline (Number of Pipelines)

Tham số num_pipelines chỉ áp dụng cho các source phân tán như Kafka, GCP PubSub và Pulsar. Nó xác định số lượng pipeline sẽ chạy trên cluster cho source.

Tham số Transform (Transform Parameters)

transform:
  script: |
    .message = downcase(string!(.message))
    .timestamp = now()
    del(.username)
  timezone: local

Định dạng đầu vào (Input Format)

Tham số input_format chỉ định định dạng dữ liệu mà source mong đợi. Các định dạng được hỗ trợ:

  • json: Mặc định.
  • plain_text: Tài liệu văn bản không có cấu trúc.

Kích hoạt/Vô hiệu hóa Source (Enabling/Disabling a Source)

quickwit source disable --index my-index --source my-source

Xóa Source (Deleting a Source)

quickwit source delete --index my-index --source my-source

Cấu hình Cổng (Ports Configuration)

Dịch vụCổng được sử dụngGiao thứcGiá trị mặc định
HTTP server với REST API${rest.listen_port}TCP7280
Cluster membership${rest.listen_port}UDP7280
GRPC service${rest.listen_port} + 1TCP7281

Thẻ: Quickwit Rust Distributed Search Node Configuration Storage Configuration

Đăng vào ngày 22 tháng 6 lúc 05:35