import logging import pandas as pd from elasticsearch import Elasticsearch from tqdm import tqdm def create_index_elastic_abbreviation( df: pd.DataFrame, logger: logging.Logger | None, ): if logger is None: logger = logging.getLogger(__name__) # Подключение к Elasticsearch es = Elasticsearch(hosts='localhost:9200') INDEX_NAME = 'nmd_abbreviation_elastic' # Удаление старого индекса, если он существует if es.indices.exists(index=INDEX_NAME): es.indices.delete(index=INDEX_NAME) mapping = { "mappings": { "properties": { "abbreviation": {"type": "text", "analyzer": "russian"}, "text": {"type": "text", "analyzer": "russian"}, } } } # Создание индекса с указанным маппингом es.indices.create(index=INDEX_NAME, body=mapping) # Индексация документов for ind, row in tqdm(df.iterrows()): document = {'abbreviation': row['name'], 'text': row['definition']} # Индексирование документа в Elasticsearch es.index(index=INDEX_NAME, id=ind, body=document) if es.indices.exists(index=INDEX_NAME): logger.info(f"Index '{INDEX_NAME}' exists.") # # Подсчет количества документов в индексе count_response = es.count(index=INDEX_NAME) logger.info(f"Total documents in '{INDEX_NAME}': {count_response['count']}") # Поиск документов, где поле "person_full_name" содержит определенное значение "Александров Д.В." query = { "query": { "multi_match": { "query": "для нужен стандарт управления бизнес процессами компании?", "fuzziness": "AUTO", "minimum_should_match": "83%", "fields": ["text"], } }, "highlight": {"fields": {"text": {}}}, } # Выполнение поиска в Elasticsearch response = es.search(index=INDEX_NAME, body=query, size=1) logger.info(f"Number of hits: {response['hits']['total']['value']}") # Вывод результата поиска for hit in response['hits']['hits']: logger.info(hit) logger.info('=====') if __name__ == '__main__': # Чтение CSV файла с данными df = pd.read_csv('/mnt/ntr_work/project/nmd800/data/abbreviations.csv') create_index_elastic_abbreviation(df)