

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# HTML 表格搜索
<a name="searching-tables"></a>

**注意**  
功能支持因所用索引类型和搜索 API 而异。要查看您使用的索引类型和搜索 API 是否支持此功能，请参阅[索引类型](https://docs.aws.amazon.com/kendra/latest/dg/hiw-index-types.html)。

Amazon Kendra的表格搜索功能可以从 HTML 文档中嵌入的表格中搜索和提取答案。搜索索引时，如果表中的摘录与查询相关，则 Amazon Kendra 包括该摘录并提供有用的信息。

Amazon Kendra 查看文档正文中的所有信息，包括表格中的有用信息。例如，索引包含业务报告，其中包含运营成本、收入和其他财务信息的表格。对于查询，“从2020-2022年起，每年的运营成本是多少？” ， Amazon Kendra 可以返回表格的摘录，该表包含相关的表格列 “运营（百万美元）” 和 “财政年度”，以及包含 2020 年、2021 年和 2022 年收入值的表格行。结果中包含表格摘录、文档标题、指向完整文档的链接以及您选择包含的任何其他文档字段。

无论信息是在表格的一个单元格中还是在多个单元格中找到，都可以在搜索结果中显示表格摘录。例如， Amazon Kendra 可以显示针对以下每种查询量身定制的表格摘录：
+ “2020 年利率最高的信用卡”
+ “2020-2022 年以来利率最高的信用卡”
+ “2020-2022 年利率排名前三的信用卡”
+ “利率低于 10% 的信用卡”
+ “所有可用的低息信用卡”

Amazon Kendra 突出显示与查询最相关的一个或多个表格单元格。搜索结果中会显示最相关的单元格及其对应的行、列和列名。表格摘录最多显示五列三行，具体取决于与查询相关的表格单元格数量以及原始表中有多少列可用。最相关的单元格与次要相关的单元格一起显示在表格摘录中。

响应包括置信度桶（`MEDIUM`,`HIGH`,`VERY_HIGH`），以显示表答案与查询的相关性。如果表格单元格的值是处于可信度的 `VERY_HIGH`，则该值将变为“最佳答案”并突出显示。对于置信度为 `HIGH` 的表格单元格值，则会突出显示这些值。对于可信的表格单元格值，则 `MEDIUM` 不会突出显示这些值。响应中会返回表答案的总体置信度。例如，如果表格主要包含有 `HIGH` 置信度的表格单元格，则表答案的响应中返回的总体置信度为 `HIGH` 置信度。

默认情况下，表格的重要性级别或权重不会高于文档的其他组成部分。在文档中，如果表与查询的相关性很小，但有一个高度相关的段落，则 Amazon Kendra 返回该段落的摘录。搜索结果显示同一文档或其他文档中提供最佳答案和最有用信息的内容。如果表格的置信度低于 `MEDIUM` 置信度，则响应中不会返回表格摘录。

要对现有索引使用表格搜索，必须将内容重新编入索引。

Amazon Kendra 表格搜索支持[同义词](https://docs.aws.amazon.com/kendra/latest/dg/index-synonyms.html)（包括自定义同义词）。 Amazon Kendra 仅支持带有表格标签内的 HTML 表格的英语文档。

以下示例显示了查询结果中包含的表摘录。要查看包含查询响应（包括表格摘录）的 JSON 示例，请参阅[查询响应和类型](https://docs.aws.amazon.com/kendra/latest/dg/query-responses-types.html)。

------
#### [ Python ]

```
import boto3
import pprint

kendra = boto3.client("kendra")

# Provide the index ID
index_id = <index-id>
# Provide the query text
query = "search string"

response = kendra.query(
        QueryText = query,
        IndexId = index_id)

print("\nSearch results for query: " + query + "\n")        

for query_result in response["ResultItems"]:

    print("-------------------")
    print("Type: " + str(query_result["Type"]))
    print("Type: " + str(query_result["Format"]))
        
    if query_result["Type"]=="ANSWER" and query_result["Format"]=="TABLE":
        answer_table = query_result["TableExcerpt"]
        print(answer_table)
        
    if query_result["Type"]=="ANSWER" and query_result["Format"]=="TEXT":
        answer_text = query_result["DocumentExcerpt"]
        print(answer_text)
        
    if query_result["Type"]=="QUESTION_ANSWER":
        question_answer_text = query_result["DocumentExcerpt"]["Text"]
        print(question_answer_text)

    if query_result["Type"]=="DOCUMENT":
        if "DocumentTitle" in query_result:
            document_title = query_result["DocumentTitle"]["Text"]
            print("Title: " + document_title)
        document_text = query_result["DocumentExcerpt"]["Text"]
        print(document_text)

    print("------------------\n\n")
```

------
#### [ Java ]

```
package com.amazonaws.kendra;

import software.amazon.awssdk.services.kendra.KendraClient;
import software.amazon.awssdk.services.kendra.model.QueryRequest;
import software.amazon.awssdk.services.kendra.model.QueryResponse;
import software.amazon.awssdk.services.kendra.model.QueryResultItem;

public class SearchIndexExample {
    public static void main(String[] args) {
        KendraClient kendra = KendraClient.builder().build();

        String query = "search string";
        String indexId = "index-id";

        QueryRequest queryRequest = QueryRequest
            .builder()
            .queryText(query)
            .indexId(indexId)
            .build();

        QueryResponse queryResponse = kendra.query(queryRequest);

        System.out.println(String.format("\nSearch results for query: %s", query));
        for(QueryResultItem item: queryResponse.resultItems()) {
            System.out.println("----------------------");
            System.out.println(String.format("Type: %s", item.type()));
            System.out.println(String.format("Format: %s", item.format()));
            
            switch(item.format()) {
                case TABLE:
                    String answerTable = item.TableExcerpt();
                    System.out.println(answerTable);
                    break;
            }

            switch(item.format()) {
                case TEXT:
                    String answerText = item.DocumentExcerpt();
                    System.out.println(answerText);
                    break;
            }

            switch(item.type()) {
                case QUESTION_ANSWER:
                    String questionAnswerText = item.documentExcerpt().text();
                    System.out.println(questionAnswerText);
                    break;
                case DOCUMENT:
                    String documentTitle = item.documentTitle().text();
                    System.out.println(String.format("Title: %s", documentTitle));
                    String documentExcerpt = item.documentExcerpt().text();
                    System.out.println(String.format("Excerpt: %s", documentExcerpt));
                    break;
                default:
                    System.out.println(String.format("Unknown query result type: %s", item.type()));

            }

            System.out.println("-----------------------\n");
        }
    }
}
```

------