or run

npx @tessl/cli init
Log in

Version

Tile

Overview

Evals

Files

Files

docs

data-manipulation.mderror-handling.mdhigh-level-interface.mdindex.mdindexing-search.mdkey-value-access.mdmessage-operations.md

indexing-search.mddocs/

0

# Indexing and Search

1

2

Efficient indexing system for fast querying and filtering of large meteorological datasets. Supports multi-key indexes, complex queries, and high-performance access to message collections.

3

4

## Capabilities

5

6

### Index Creation

7

8

Create indexes for fast message lookup and filtering.

9

10

```python { .api }

11

def codes_index_new_from_file(filename, keys):

12

"""

13

Create index from file.

14

15

Parameters:

16

- filename (str): Path to GRIB/BUFR file

17

- keys (list[str]): List of keys to index on

18

19

Returns:

20

int: Index handle ID

21

"""

22

23

def codes_index_add_file(indexid, filename):

24

"""

25

Add file to existing index.

26

27

Parameters:

28

- indexid (int): Index handle ID

29

- filename (str): Path to additional file

30

"""

31

32

def codes_index_release(indexid):

33

"""

34

Release index from memory.

35

36

Parameters:

37

- indexid (int): Index handle ID

38

"""

39

```

40

41

### Index Queries

42

43

Query and filter messages using index.

44

45

```python { .api }

46

def codes_index_select(indexid, key, value):

47

"""

48

Select messages by key value.

49

50

Parameters:

51

- indexid (int): Index handle ID

52

- key (str): Key name to filter on

53

- value: Value to match

54

55

Returns:

56

int: Number of matching messages

57

"""

58

59

def codes_index_get(indexid, key):

60

"""

61

Get unique values for key.

62

63

Parameters:

64

- indexid (int): Index handle ID

65

- key (str): Key name

66

67

Returns:

68

list: Unique values for the key

69

"""

70

71

def codes_index_get_size(indexid, key):

72

"""

73

Get number of unique values for key.

74

75

Parameters:

76

- indexid (int): Index handle ID

77

- key (str): Key name

78

79

Returns:

80

int: Number of unique values

81

"""

82

```

83

84

### Message Retrieval

85

86

Retrieve messages from index queries.

87

88

```python { .api }

89

def codes_new_from_index(indexid):

90

"""

91

Create message from current index selection.

92

93

Parameters:

94

- indexid (int): Index handle ID

95

96

Returns:

97

int: Message handle ID or None if no more messages

98

"""

99

```

100

101

## Usage Examples

102

103

### Creating and Using an Index

104

105

```python

106

import eccodes

107

108

# Create index on multiple keys

109

index = eccodes.codes_index_new_from_file(

110

'forecast.grib',

111

['paramId', 'level', 'dataDate']

112

)

113

114

# Get available values for each key

115

params = eccodes.codes_index_get(index, 'paramId')

116

levels = eccodes.codes_index_get(index, 'level')

117

dates = eccodes.codes_index_get(index, 'dataDate')

118

119

print(f"Parameters: {params}")

120

print(f"Levels: {levels}")

121

print(f"Dates: {dates}")

122

123

# Select specific data

124

eccodes.codes_index_select(index, 'paramId', 130) # Temperature

125

eccodes.codes_index_select(index, 'level', 850) # 850 hPa

126

127

# Iterate through matching messages

128

while True:

129

msg = eccodes.codes_new_from_index(index)

130

if msg is None:

131

break

132

133

date = eccodes.codes_get(msg, 'dataDate')

134

time = eccodes.codes_get(msg, 'dataTime')

135

print(f"Temperature at 850 hPa: {date} {time:04d}Z")

136

137

eccodes.codes_release(msg)

138

139

eccodes.codes_index_release(index)

140

```