日本熟妇hd丰满老熟妇,中文字幕一区二区三区在线不卡 ,亚洲成片在线观看,免费女同在线一区二区

嵌套類型查詢

NestedQuery用于查詢嵌套類型字段中子行的數(shù)據(jù)。嵌套類型不能直接查詢,需要通過NestedQuery包裝,NestedQuery中需要指定嵌套類型字段的路徑和一個子查詢,其中子查詢可以是任意Query類型。

前提條件

參數(shù)

參數(shù)

說明

TableName

數(shù)據(jù)表名稱。

IndexName

多元索引名稱。

Path

路徑名,嵌套類型的列的樹狀路徑。例如news.title表示嵌套類型的news列中的title子列。

Query

嵌套類型的列中子列上的查詢,子列上的查詢可以是任意Query類型。

ScoreMode

當列存在多個值時基于哪個值計算分數(shù)。

InnerHits

嵌套類型字段的子列的配置參數(shù)。包括如下配置項:

  • Sort:Nested子行返回時的排序規(guī)則。

  • Offset:當Nested列包含多個子行時,子行返回的起始位置。

  • Limit:當Nested列包含多個子行時,返回子行的數(shù)量。默認值為3。

  • Highlight:Nested子列高亮參數(shù)配置。具體參數(shù)配置說明請參見摘要與高亮

示例

單層級嵌套類型查詢示例

以下示例用于查詢col_nested.nested_1tablestore的數(shù)據(jù)。其中col_nested為嵌套類型字段,子行中包含nested_1nested_2兩列。

func NestedQuery(client *tablestore.TableStoreClient, tableName string, indexName string) {
    searchRequest := &tablestore.SearchRequest{}
    searchRequest.SetTableName(tableName)
    searchRequest.SetIndexName(indexName)
    query := &search.NestedQuery{ //設(shè)置查詢類型為NestedQuery。
        Path: "col_nested", //設(shè)置嵌套類型字段的路徑。
        Query: &search.TermQuery{ //構(gòu)造NestedQuery的子查詢。
            FieldName: "col_nested.nested_1", //設(shè)置字段名,注意帶有Nested列的前綴。
            Term:      "tablestore",          //設(shè)置要查詢的值。
        },
        ScoreMode: search.ScoreMode_Avg,
    }
    searchQuery := search.NewSearchQuery()
    searchQuery.SetQuery(query)
    searchRequest.SetSearchQuery(searchQuery)
    //設(shè)置為返回所有列。
    searchRequest.SetColumnsToGet(&tablestore.ColumnsToGet{
        ReturnAll: true,
    })
    searchResponse, err := client.Search(searchRequest)
    if err != nil {
        fmt.Printf("%#v", err)
        return
    }
    fmt.Println("IsAllSuccess: ", searchResponse.IsAllSuccess) //查看返回結(jié)果是否完整。
    fmt.Println("RowCount: ", len(searchResponse.Rows))
    for _, row := range searchResponse.Rows {
        jsonBody, err := json.Marshal(row)
        if err != nil {
            panic(err)
        }
        fmt.Println("Row: ", string(jsonBody))
    }
}

嵌套類型查詢使用查詢摘要與高亮示例

以下示例用于查詢表中col_nested嵌套類型字段中nested_1子列的值能夠匹配tablestore的數(shù)據(jù),并在返回結(jié)果中對查詢詞進行高亮顯示。其中col_nested嵌套類型字段的子行中包含nested_1nested_2兩列。

func NestedQueryWithHighlight(client *tablestore.TableStoreClient, tableName string, indexName string) {
	searchRequest := &tablestore.SearchRequest{}
	searchRequest.SetTableName(tableName)
	searchRequest.SetIndexName(indexName)
	query := &search.NestedQuery{ //設(shè)置查詢類型為NestedQuery。
		Path: "col_nested", //設(shè)置嵌套類型字段的路徑。
		Query: &search.TermQuery{ //構(gòu)造NestedQuery的子查詢。
			FieldName: "col_nested.nested_1",       //設(shè)置字段名,注意帶有Nested列的前綴。
			Term:      "tablestore", //設(shè)置要查詢的值。
		},
		ScoreMode: search.ScoreMode_Avg,
		InnerHits: &search.InnerHits{
			Offset: proto.Int32(0),
			Limit:  proto.Int32(3),
			Highlight: &search.Highlight{
				FieldHighlightParameters: map[string]*search.HighlightParameter{
					"col_nested.nested_1": {
						NumberOfFragments: proto.Int32(5),
						PreTag:            proto.String("<em>"),
						PostTag:           proto.String("</em>"),
					},
				},
			},
		},
	}
	searchQuery := search.NewSearchQuery()
	searchQuery.SetQuery(query)
	searchRequest.SetSearchQuery(searchQuery)
	//設(shè)置為返回所有列。
	searchRequest.SetColumnsToGet(&tablestore.ColumnsToGet{
		ReturnAllFromIndex: true,
	})

	if resp, err := client.Search(searchRequest); err != nil {
		fmt.Println("Highlighting query failed with err: ", err)
	} else {
		fmt.Println("RequestId: " + resp.RequestId)
                // 打印高亮結(jié)果。
		printSearchHit(resp.SearchHits, " ")
	}
	fmt.Println("highlight query finished")
}


/**
 * 打印searchHit內(nèi)容。
 * @param searchHits searchHits
 * @param padding Nested結(jié)構(gòu)輸出時,增加前綴以打印層次信息。
 */
func printSearchHit(searchHits []*tablestore.SearchHit, padding string) {
	for _, searchHit := range searchHits {
		if searchHit.Score != nil {
			fmt.Printf("%sScore: %f\n", padding, *searchHit.Score)
		}

		if searchHit.NestedDocOffset != nil {
			fmt.Printf("%sOffset: %d\n", padding, *searchHit.NestedDocOffset)
		}

		if searchHit.Row != nil {
			fmt.Printf("%sRow: %v\n", padding, *searchHit.Row)
		}

		if searchHit.HighlightResultItem != nil && len(searchHit.HighlightResultItem.HighlightFields) != 0 {
			fmt.Printf("%sHighlight: \n", padding)
			for colName, highlightResult := range searchHit.HighlightResultItem.HighlightFields {
				fmt.Printf("%sColumnName: %s, Highlight_Fragments: %v\n", padding+padding, colName, highlightResult.Fragments)
			}
		}

		if searchHit.SearchInnerHits != nil && len(searchHit.SearchInnerHits) != 0 {
			fmt.Printf("%sInnerHits: \n", padding)
			for path, innerSearchHit := range searchHit.SearchInnerHits {
				fmt.Printf("%sPath: %s\n", padding+padding, path)
				fmt.Printf("%sSearchHit: \n", padding+padding)
				printSearchHit(innerSearchHit.SearchHits, padding+padding)
			}
		}

		fmt.Println("")
	}
}

常見問題

相關(guān)文檔