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
```