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 để xây dựng 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 bài viết Tạo giao diện tìm kiếm bằng tiện ích tìm kiếm.

Xây dựng giao diện tìm kiếm

Việc xây dựng giao diện tìm kiếm tối thiểu đòi hỏi phải thực hiện một số bước:

  1. Định cấu hình ứng dụng tìm kiếm.
  2. Tạo thông tin xác thực 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 sử 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ế 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 xác thực để yêu cầu cấp quyền thay mặt người dùng. Sử dụng phạm vi https://www.googleapis.com/auth/cloud_search.query.

Để biết thêm thông tin về các lựa chọn OAuth, hãy xem Nền tảng nhận dạng của Google.

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 bao gồm một query văn bản và một searchApplicationId.

Ví dụ này truy vấn 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ị title của mục và đườ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ả phù hợp cho một truy vấn. Trường queryInterpretation cho biết điều này. Nếu chỉ kết quả bổ sung được trả về, thì InterpretationType sẽ là REPLACE. Nếu kết quả bổ sung được kết hợp, thì đó là BLEND.

Khi trả về kết quả bổ sung, hãy cân nhắc thông báo cho người dùng. Đối với REPLACE, bạn có thể nói: "Không có kết quả nào phù hợp với nội dung tìm kiếm của bạn. Đang hiển thị kết quả cho các truy vấn 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ề người và nhân viên bằng tính năng Tìm kiếm người. 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 bao gồm assistCardProtoHoldercardTypeRELATED_PEOPLE_ANSWER_CARD.

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

Các tính nă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 tính năng 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ác cụm từ truy vấn, matchRanges sẽ xác định vị trí của các cụm từ đó. Sử dụng các phạm vi 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 đoạn trích:

{
  "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ị

Sử dụng trường metadata cho các 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 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ục 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à thứ cấp.

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á là đúng.

Á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ả phù hợp đối với một loại cụ thể.
  • Bộ lọc giá trị: hạn chế kết quả phù hợp dựa trên toán tử và giá trị.

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

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

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 khía cạnh, Cloud Search sẽ tính toán các giá trị thường xuyên nhất cho các thuộc tính đó.

Mẫu điển hình: 1. Truy vấn chỉ định thuộc tính khía cạnh. 1. Hiển thị kết quả tìm kiếm và thuộc tính. 1. Người dùng chọn 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ả thuộc tính với các trường dựa trên số nguyên

Đánh dấu thuộc tính số nguyên là có thể phân loại theo khía cạnh để 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 giỏ mặc định trong giản đồ.

Kết quả khía cạnh theo kích thước hoặc ngày của tài liệu

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

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

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.