Как реализовать полнотекстовый поиск в корзине Amazon s3?

#c# #search #amazon-s3

#c# #Поиск #amazon-s3

Вопрос:

У меня есть корзина на S3, в которой у меня есть большое количество текстовых файлов, PDF, doc.у каждого файла есть другое имя. Я хочу выполнить поиск по некоторому тексту в этих файлах.

Для примера у меня есть файлы, указанные ниже :

  1. abc/myfolder/abac.txt
  2. abc/myfolder/abacpfd.pdf
  3. abc/myfolder/abacpfd.doc

и я хочу выполнить поиск текста типа «Я человек» в вышеуказанных файлах. если текст содержится в этих файлах, верните имя файла

Как этого добиться? Возможно ли это вообще с c #?

Комментарии:

1. есть ли у вас файлы какого-либо другого типа, кроме txt, pdf, doc?

2. @MihirDave Нет, у меня нет

3. И примерно при какой частоте будет запущен поиск? Например, 5 раз в минуту или раз в час

4. Это зависит от пользователей, если несколько пользователей хотят выполнять поиск одновременно, поэтому количество идет от 20 до 50 в секунду.

5. Хорошо, и насколько велики ваши файлы? и приблизительно общий размер всех файлов

Ответ №1:

Amazon S3 не предоставляет никаких сервисов, которые касаются содержимого объектов.

Вам нужно будет запустить какую-либо форму программного обеспечения, которое сканирует и индексирует содержимое файлов S3 (например, Elasticsearch).

Ответ №2:

Вот руководство, в котором используются Tika (для распознавания PDF) и OpenSearch (для поисковой системы) для поиска содержимого PDF-файлов в корзине S3:

 import boto3
from tika import parser
from opensearchpy import OpenSearch
from config import *
import sys


# opensearch object
os = OpenSearch(opensearch_uri)

s3_file_name="prescription.pdf"
bucket_name="mixpeek-demo"


def download_file():
    """Download the file
    :param str s3_file_name: name of s3 file
    :param str bucket_name: bucket name of where the s3 file is stored
    """

    # s3 boto3 client instantiation
    s3_client = boto3.client(
        's3',
        aws_access_key_id=aws_access_key_id,
        aws_secret_access_key=aws_secret_access_key,
        region_name=region_name
    )

    # open in memory
    with open(s3_file_name, 'wb') as file:
        s3_client.download_fileobj(
            bucket_name,
            s3_file_name,
            file
        )
        print("file downloaded")
        # parse the file
        parsed_pdf_content = parser.from_file(s3_file_name)['content']
        print("file contents extracted")
        # insert parsed pdf content into elasticsearch
        insert_into_search_engine(s3_file_name, parsed_pdf_content)
        print("file contents inserted into search engine")


def insert_into_search_engine(s3_file_name, parsed_pdf_content):
    """Download the file
    :param str s3_file_name: name of s3 file
    :param str parsed_pdf_content: extracted contents of PDF file
    """
    doc = {
        "filename": s3_file_name,
        "parsed_pdf_content": parsed_pdf_content
    }
    # insert
    resp = os.index(
        index = index_name,
        body = doc,
        id = 1,
        refresh = True
    )
    print('nAdding document:')
    print(resp)


def create_index():
    """Create the index
    """
    index_body = {
        'settings': {
            'index': {
                'number_of_shards': 1
            }
        }
    }
    response = os.indices.create(index_name, body=index_body)
    print('nCreating index:')
    print(response)


if __name__ == '__main__':
    globals()[sys.argv[1]]()
  

полное руководство:https://medium.com/@mixpeek/search-text-from-pdf-files-stored-in-an-s3-bucket-2f10947eebd3

Соответствующий репозиторий github:https://github.com/mixpeek/pdf-search-s3

Ответ №3:

Точно, у меня была эта проблема, но каким-то образом я решил ее, не используя подход поиска. Если я не мог найти решение, я собирался попробовать этот проект с открытым исходным кодом: filestash

Комментарии:

1. Ферхат, у тебя есть шанс попробовать Filestash?

2. К сожалению, нет, Керем. Но я могу сказать, что, насколько я помню (неясно, поэтому вам нужно проверить более подробно), это не программное решение для полнотекстового поиска. Я имею в виду, что для этого нет sdk или API. Я собирался использовать его для решения проблемы с отладкой в моем локальном. Мы подозревали, что в некоторых файлах отсутствует содержимое.