from utils import load_config
from opensearch_sdk import OpenGauss
config = load_config()
client = OpenGauss(
hosts=[{'host': config['host'], 'port': config['port']}],
database=config['database'],
user=config['user'],
password=config['password']
)
try:
print("--- Opensearch兼容接口Search Operations Example ---")
print("\nCreating test index...")
mapping = {
"mappings": {
"properties": {
"categories": {"type": "text"},
"question": {"type": "text"},
"answerList": {"type": "text"},
"doc_uuid": {"type": "keyword"}
}
}
}
client.create_index("test_index_search", mapping)
print("Created index: test_index_search")
print("\nInserting test documents...")
test_documents = [
{
"id": "doc_001",
"data": {
"categories": "一级分类1/二级分类1",
"question": "标准问题1",
"answerList": "答案1",
"doc_uuid": "uuid1"
}
},
{
"id": "doc_002",
"data": {
"categories": "一级分类1/二级分类2",
"question": "标准问题2",
"answerList": "答案2",
"doc_uuid": "uuid2"
}
},
{
"id": "doc_003",
"data": {
"categories": "一级分类2/二级分类1",
"question": "标准问题3",
"answerList": "答案3",
"doc_uuid": "uuid3"
}
},
{
"id": "doc_004",
"data": {
"categories": "一级分类1/二级分类1",
"question": "另一个问题",
"answerList": "答案4",
"doc_uuid": "uuid4"
}
}
]
for doc in test_documents:
result = client.index("test_index_search", doc["id"], doc["data"])
print(f"Inserted document {doc['id']}: {result['result']}")
print("\n--- 3.1 Generic Search ---")
search_body = {
"query": {
"match": {
"question": "标准问题"
}
},
"size": 10
}
results = client.search("test_index_search", search_body)
print(f"Search results for '标准问题':")
for hit in results["hits"]["hits"]:
print(f" - {hit['_source']}")
print("\n--- 3.2 Search by Category ---")
results = client.search_by_category("test_index_search", "一级分类1/二级分类1")
print(f"Search results for category '一级分类1/二级分类1':")
for hit in results["hits"]["hits"]:
print(f" - {hit['_source']}")
print("\n--- 3.3 Search by Multiple Fields ---")
field_value_pairs = {
"doc_uuid": ["uuid1", "uuid2"]
}
results = client.search_by_multiple_fields(
"test_index_search",
field_value_pairs,
source_fields=["question", "answerList"],
size=20
)
print(f"Search results for doc_uuid in ['uuid1', 'uuid2']:")
for hit in results["hits"]["hits"]:
print(f" - {hit['_source']}")
print("\n--- 3.4 Delete Documents by Field Values ---")
result = client.delete_docs_by_field_values(
"test_index_search",
"doc_uuid",
["uuid3", "uuid4"]
)
print(f"Deleted {result['deleted']} documents with doc_uuid in ['uuid3', 'uuid4']")
print("\nVerifying deletion by searching for remaining documents...")
all_docs = client.search("test_index_search", {"query": {}})
print(f"Remaining documents: {all_docs['hits']['total']['value']}")
for hit in all_docs["hits"]["hits"]:
print(f" - {hit['_source']}")
finally:
print("\nCleaning up test index...")
try:
client.delete_index("test_index_search")
print("Deleted test index: test_index_search")
except Exception as e:
print(f"Error deleting test index: {e}")
client.close()
print("Database connection closed.")