You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
langchain/templates/elastic-query-generator/elastic_query_generator/elastic_index_info.py

40 lines
1.3 KiB
Python

from typing import List
def _list_indices(database, include_indices=None, ignore_indices=None) -> List[str]:
all_indices = [index["index"] for index in database.cat.indices(format="json")]
if include_indices:
all_indices = [i for i in all_indices if i in include_indices]
if ignore_indices:
all_indices = [i for i in all_indices if i not in ignore_indices]
return all_indices
def get_indices_infos(
database,
sample_documents_in_index_info=5,
include_indices=None,
ignore_indices=None,
) -> str:
indices = _list_indices(
database, include_indices=include_indices, ignore_indices=ignore_indices
)
mappings = database.indices.get_mapping(index=",".join(indices))
if sample_documents_in_index_info > 0:
for k, v in mappings.items():
hits = database.search(
index=k,
query={"match_all": {}},
size=sample_documents_in_index_info,
)["hits"]["hits"]
hits = [str(hit["_source"]) for hit in hits]
mappings[k]["mappings"] = str(v) + "\n\n/*\n" + "\n".join(hits) + "\n*/"
return "\n\n".join(
[
"Mapping for index {}:\n{}".format(index, mappings[index]["mappings"])
for index in mappings
]
)