Tạo giao diện tìm kiếm bằng Query API (API Truy vấn)

Query API cung cấp các phương thức tìm kiếm và đề xuất để tạo giao diện tìm kiếm hoặc nhúng kết quả vào một ứng dụng.

Đối với các ứng dụng web có yêu cầu tối thiểu, hãy cân nhắc sử dụng tiện ích tìm kiếm. Xem phần Tạo giao diện tìm kiếm bằng tiện ích tìm kiếm.

Tạo giao diện tìm kiếm

Để tạo một giao diện tìm kiếm tối giản, bạn cần thực hiện một số bước:

  1. Định cấu hình một ứng dụng tìm kiếm.
  2. Tạo thông tin đăng nhập OAuth cho ứng dụng.
  3. Truy vấn chỉ mục.
  4. Hiển thị kết quả truy vấn.

Bạn có thể cải thiện giao diện bằng các tính năng như phân trang, sắp xếp, lọc, khía cạnh và tự động hoàn thành.

Định cấu hình ứng dụng tìm kiếm

Bạn phải tạo ít nhất một ứng dụng tìm kiếm cho mỗi giao diện tìm kiếm. Ứng dụng tìm kiếm cung cấp các tham số mặc định, chẳng hạn như nguồn dữ liệu, thứ tự sắp xếp, bộ lọc và khía cạnh. Bạn có thể ghi đè các tham số này bằng Query API.

Bạn không thể tăng số lượng nguồn dữ liệu được dùng trong một truy vấn vượt quá số lượng nguồn dữ liệu được định cấu hình trong ứng dụng tìm kiếm. Bạn có thể hạn chế một truy vấn đối với một tập hợp con của các nguồn này bằng cách sử dụng dataSourceRestrictions.

Để biết thêm thông tin, hãy xem bài viết Tuỳ chỉnh trải nghiệm tìm kiếm.

Tạo thông tin xác thực OAuth cho ứng dụng

Ngoài các bước trong phần Định cấu hình quyền truy cập vào Cloud Search API, bạn phải tạo thông tin xác thực OAuth cho ứng dụng web của mình.

Sử dụng thông tin đăng nhập để yêu cầu uỷ quyền thay mặt cho người dùng. Sử dụng phạm vi https://www.googleapis.com/auth/cloud_search.query.

Để biết thêm về các lựa chọn OAuth, hãy xem Google Identity Platform.

Truy vấn chỉ mục

Sử dụng phương thức search để tìm kiếm chỉ mục.

Mỗi yêu cầu phải có một văn bản query và một searchApplicationId.

Ví dụ này truy vấn một nguồn dữ liệu phim:

{
  "query": "titanic",
  "requestOptions": {
    "searchApplicationId": "searchapplications/<search_app_id>"
  }
}

Hiển thị kết quả truy vấn

Giao diện tìm kiếm phải hiển thị mục title và một đường liên kết đến mục gốc. Bạn cũng có thể sử dụng đoạn trích và siêu dữ liệu để cải thiện cách hiển thị.

Xử lý kết quả bổ sung

Cloud Search trả về kết quả bổ sung khi không có đủ kết quả khớp cho một truy vấn. Trường queryInterpretation cho biết điều này. Nếu chỉ có kết quả bổ sung được trả về, thì InterpretationType sẽ là REPLACE. Nếu được kết hợp, thì đó là BLEND.

Khi trả về kết quả bổ sung, hãy cân nhắc việc thông báo cho người dùng. Đối với a<0x0A>REPLACE, bạn có thể nói: "Cụm từ bạn tìm kiếm không khớp với bất kỳ kết quả nào. Đang hiển thị kết quả cho những cụm từ tìm kiếm tương tự."

Xử lý kết quả về người

Cloud Search trả về các tài liệu liên quan đến thông tin về nhân viên và con người bằng tính năng Tìm kiếm người dùng. Kết quả nằm trong trường structuredResults:

{
  "results": [...],
  "structuredResults": [{
    "person": {...}
  }]
}

So khớp nhân viên cấp dưới trực tiếp

Tính năng So khớp nhân viên cấp dưới trực tiếp cho phép người dùng xem nhân viên cấp dưới trực tiếp của một người. Phản hồi này bao gồm một assistCardProtoHoldercardTypeRELATED_PEOPLE_ANSWER_CARD.

Tắt tính năng tối ưu hoá

Các hoạt động tối ưu hoá như kết quả bổ sung được bật theo mặc định. Bạn có thể tắt các thông báo này:

Làm nổi bật đoạn trích

Cloud Search trả về một đoạn trích cho văn bản hoặc HTML được lập chỉ mục. Nếu có cụm từ tìm kiếm, matchRanges sẽ xác định vị trí của cụm từ đó. Sử dụng các dải ô này để làm nổi bật văn bản.

function highlightSnippet(snippet) {
  let text = snippet.snippet;
  let formattedText = text;
  if (snippet.matchRanges) {
    let parts = [];
    let index = 0;
    for (let match of snippet.matchRanges) {
      let start = match.start || 0; // Default to 0 if omitted
      let end = match.end;
      if (index < start) { // Include any leading text before/between ranges
        parts.push(text.slice(index, start));
      }
      parts.push('<span class="highlight">');
      parts.push(text.slice(start, end));
      parts.push('</span>');
      index = end;
    }
    parts.push(text.slice(index)); // Include any trailing text after last range
    formattedText = parts.join('');
  }
  return formattedText;
}

Cho trước đoạn mã:

{
  "snippet": "This is an example snippet...",
  "matchRanges": [
    {
      "start": 11,
      "end": 18
    }
  ]
}

Chuỗi HTML kết quả là:

This is an <span class="highlight">example</span> snippet...

Siêu dữ liệu đang hiển thị

Hãy sử dụng trường metadata cho những thông tin như createTime, updateTime và dữ liệu có cấu trúc. Sử dụng displayOptions để hiển thị dữ liệu có cấu trúc.

Truy xuất các kết quả khác

Để truy xuất thêm kết quả, hãy đặt trường start thành độ lệch đã chọn. Điều chỉnh kích thước trang bằng pageSize. Sử dụng resultCount để hiển thị tổng số mặt hàng hoặc số lượng ước tính.

Phân loại kết quả

Sử dụng sortOptions để chỉ định thứ tự:

  • operatorName: thuộc tính để sắp xếp.
  • sortOrder: ASCENDING hoặc DESCENDING.

Mức độ liên quan là khoá sắp xếp mặc định và khoá sắp xếp phụ.

Thêm bộ lọc

Hạn chế kết quả bằng bộ lọc trong ứng dụng tìm kiếm hoặc yêu cầu. Nếu cả hai đều chỉ định bộ lọc cho một nguồn, thì cả hai phải đánh giá thành true.

Áp dụng bộ lọc trong dataSourceRestrictions.filterOptions[]. Các loại bộ lọc chính:

  • Bộ lọc đối tượng: hạn chế kết quả khớp theo một loại cụ thể.
  • Bộ lọc giá trị: hạn chế các kết quả trùng khớp dựa trên toán tử và giá trị.

Bộ lọc kết hợp kết hợp nhiều bộ lọc giá trị.

Tinh chỉnh kết quả bằng các khía cạnh

Các khía cạnh giúp người dùng tinh chỉnh truy vấn một cách tương tác. Khi bạn yêu cầu các khía cạnh, Cloud Search sẽ tính toán các giá trị thường xuyên nhất cho những thuộc tính đó.

Mẫu hình thông thường: 1. Truy vấn chỉ định các thuộc tính của khía cạnh. 1. Kết xuất kết quả tìm kiếm và kết quả theo khía cạnh. 1. Người dùng chọn các giá trị khía cạnh. 1. Lặp lại truy vấn bằng bộ lọc dựa trên lựa chọn.

Kết quả phân loại theo khía cạnh có các trường dựa trên số nguyên

Đánh dấu một thuộc tính số nguyên là có thể phân loại để tinh chỉnh kết quả theo phạm vi (ví dụ: "100 – 200" trang). Đặt isFacetable thành true và xác định các lựa chọn phân nhóm mặc định trong giản đồ.

Phân loại kết quả theo kích thước hoặc ngày của tài liệu

Sử dụng các toán tử dành riêng:

  • itemsize: cho kích thước tệp tính bằng byte.
  • createddatetimestamp: đối với ngày tạo.
  • lastmodified: cho ngày chỉnh sửa.

Thêm đề xuất

Sử dụng API đề xuất để tự động hoàn thành dựa trên nhật ký truy vấn, danh bạ và nội dung tài liệu.