be52af70
tangwang
first commit
|
1
|
"""
|
59b0a342
tangwang
创建手写 mapping JSON
|
2
|
Elasticsearch mapping loader.
|
be52af70
tangwang
first commit
|
3
|
|
59b0a342
tangwang
创建手写 mapping JSON
|
4
|
Loads Elasticsearch index mapping from JSON file.
|
be52af70
tangwang
first commit
|
5
6
7
|
"""
from typing import Dict, Any
|
59b0a342
tangwang
创建手写 mapping JSON
|
8
|
import json
|
325eec03
tangwang
1. 日志、配置基础设施,使用优化
|
9
|
import logging
|
59b0a342
tangwang
创建手写 mapping JSON
|
10
|
from pathlib import Path
|
be52af70
tangwang
first commit
|
11
|
|
325eec03
tangwang
1. 日志、配置基础设施,使用优化
|
12
13
|
logger = logging.getLogger(__name__)
|
59b0a342
tangwang
创建手写 mapping JSON
|
14
15
16
17
18
19
20
21
|
# Default index name
DEFAULT_INDEX_NAME = "search_products"
# Default mapping file path
DEFAULT_MAPPING_FILE = Path(__file__).parent.parent / "mappings" / "search_products.json"
def load_mapping(mapping_file: str = None) -> Dict[str, Any]:
|
a10a89a3
tangwang
构造测试数据用于测试分类 和 三种...
|
22
|
"""
|
59b0a342
tangwang
创建手写 mapping JSON
|
23
24
|
Load Elasticsearch mapping from JSON file.
|
a10a89a3
tangwang
构造测试数据用于测试分类 和 三种...
|
25
|
Args:
|
59b0a342
tangwang
创建手写 mapping JSON
|
26
27
|
mapping_file: Path to mapping JSON file. If None, uses default.
|
a10a89a3
tangwang
构造测试数据用于测试分类 和 三种...
|
28
|
Returns:
|
59b0a342
tangwang
创建手写 mapping JSON
|
29
30
31
32
33
34
35
36
37
38
39
40
|
Dictionary containing index configuration (settings + mappings)
Raises:
FileNotFoundError: If mapping file doesn't exist
json.JSONDecodeError: If mapping file is invalid JSON
"""
if mapping_file is None:
mapping_file = str(DEFAULT_MAPPING_FILE)
mapping_path = Path(mapping_file)
if not mapping_path.exists():
raise FileNotFoundError(f"Mapping file not found: {mapping_path}")
|
be52af70
tangwang
first commit
|
41
|
|
59b0a342
tangwang
创建手写 mapping JSON
|
42
43
44
45
46
47
48
49
|
with open(mapping_path, 'r', encoding='utf-8') as f:
mapping = json.load(f)
logger.info(f"Loaded mapping from {mapping_path}")
return mapping
def create_index_if_not_exists(es_client, index_name: str, mapping: Dict[str, Any] = None) -> bool:
|
be52af70
tangwang
first commit
|
50
51
52
53
|
"""
Create Elasticsearch index if it doesn't exist.
Args:
|
bf89b597
tangwang
feat(search): ada...
|
54
|
es_client: ESClient instance
|
be52af70
tangwang
first commit
|
55
|
index_name: Name of the index to create
|
59b0a342
tangwang
创建手写 mapping JSON
|
56
|
mapping: Index mapping configuration. If None, loads from default file.
|
be52af70
tangwang
first commit
|
57
58
59
60
|
Returns:
True if index was created, False if it already exists
"""
|
bf89b597
tangwang
feat(search): ada...
|
61
|
if es_client.index_exists(index_name):
|
325eec03
tangwang
1. 日志、配置基础设施,使用优化
|
62
|
logger.info(f"Index '{index_name}' already exists")
|
be52af70
tangwang
first commit
|
63
64
|
return False
|
59b0a342
tangwang
创建手写 mapping JSON
|
65
66
67
|
if mapping is None:
mapping = load_mapping()
|
bf89b597
tangwang
feat(search): ada...
|
68
|
if es_client.create_index(index_name, mapping):
|
a10a89a3
tangwang
构造测试数据用于测试分类 和 三种...
|
69
70
|
logger.info(f"Index '{index_name}' created successfully")
return True
|
bf89b597
tangwang
feat(search): ada...
|
71
72
73
|
else:
logger.error(f"Failed to create index '{index_name}'")
return False
|
be52af70
tangwang
first commit
|
74
75
76
77
78
79
80
|
def delete_index_if_exists(es_client, index_name: str) -> bool:
"""
Delete Elasticsearch index if it exists.
Args:
|
bf89b597
tangwang
feat(search): ada...
|
81
|
es_client: ESClient instance
|
be52af70
tangwang
first commit
|
82
83
84
85
86
|
index_name: Name of the index to delete
Returns:
True if index was deleted, False if it didn't exist
"""
|
bf89b597
tangwang
feat(search): ada...
|
87
|
if not es_client.index_exists(index_name):
|
325eec03
tangwang
1. 日志、配置基础设施,使用优化
|
88
|
logger.warning(f"Index '{index_name}' does not exist")
|
be52af70
tangwang
first commit
|
89
90
|
return False
|
bf89b597
tangwang
feat(search): ada...
|
91
|
if es_client.delete_index(index_name):
|
a10a89a3
tangwang
构造测试数据用于测试分类 和 三种...
|
92
93
|
logger.info(f"Index '{index_name}' deleted successfully")
return True
|
bf89b597
tangwang
feat(search): ada...
|
94
95
96
|
else:
logger.error(f"Failed to delete index '{index_name}'")
return False
|
be52af70
tangwang
first commit
|
97
98
99
100
101
102
103
|
def update_mapping(es_client, index_name: str, new_fields: Dict[str, Any]) -> bool:
"""
Update mapping for existing index (only adding new fields).
Args:
|
bf89b597
tangwang
feat(search): ada...
|
104
|
es_client: ESClient instance
|
be52af70
tangwang
first commit
|
105
106
107
108
109
110
|
index_name: Name of the index
new_fields: New field mappings to add
Returns:
True if successful
"""
|
bf89b597
tangwang
feat(search): ada...
|
111
|
if not es_client.index_exists(index_name):
|
325eec03
tangwang
1. 日志、配置基础设施,使用优化
|
112
|
logger.error(f"Index '{index_name}' does not exist")
|
be52af70
tangwang
first commit
|
113
114
115
|
return False
mapping = {"properties": new_fields}
|
bf89b597
tangwang
feat(search): ada...
|
116
|
if es_client.update_mapping(index_name, mapping):
|
a10a89a3
tangwang
构造测试数据用于测试分类 和 三种...
|
117
118
|
logger.info(f"Mapping updated for index '{index_name}'")
return True
|
bf89b597
tangwang
feat(search): ada...
|
119
120
121
|
else:
logger.error(f"Failed to update mapping for index '{index_name}'")
return False
|