diff --git a/bhs_api/__init__.py b/bhs_api/__init__.py index 015df83..24067d4 100644 --- a/bhs_api/__init__.py +++ b/bhs_api/__init__.py @@ -75,7 +75,7 @@ def create_app(testing=False, live=False): # Create the elasticsearch connection app.es = elasticsearch.Elasticsearch(conf.elasticsearch_host) - app.es_data_db_index_name = conf.elasticsearch_data_index if getattr(conf, "elasticsearch_data_index") else app.data_db.name + app.es_data_db_index_name = getattr(conf, "elasticsearch_data_index", app.data_db.name) # Add the user's endpoints from bhs_api.user import user_endpoints diff --git a/bhs_api/item.py b/bhs_api/item.py index a630954..887bec7 100644 --- a/bhs_api/item.py +++ b/bhs_api/item.py @@ -226,6 +226,8 @@ def enrich_item(item, db=None, collection_name=None): def get_item_by_id(id, collection_name, db=None): + if collection_name == "persons": + raise Exception("persons collection does not support getting item by id, you need to search person using multiple fields") if not db: db = current_app.data_db id_field = get_collection_id_field(collection_name) @@ -346,7 +348,7 @@ def get_image_url(image_id, bucket): return 'https://storage.googleapis.com/{}/{}.jpg'.format(bucket, image_id) -def get_collection_id_field(collection_name, is_elasticsearch=False): +def get_collection_id_field(collection_name): doc_id = 'UnitId' if collection_name == 'photos': doc_id = 'PictureId' @@ -354,8 +356,7 @@ def get_collection_id_field(collection_name, is_elasticsearch=False): elif collection_name == 'genTreeIndividuals': doc_id = 'ID' elif collection_name == 'persons': - # elasticsearch cannot have "id" attribute - doc_id = "PID" if is_elasticsearch else "id" + raise Exception("persons collection does not support plain id field, but a combination of fields") elif collection_name == 'synonyms': doc_id = '_id' elif collection_name == 'trees': @@ -412,46 +413,41 @@ def create_slug(document, collection_name): return ret def get_doc_id(collection_name, doc): - mongo_id_field = get_collection_id_field(collection_name, is_elasticsearch=False) - elasticsearch_id_field = get_collection_id_field(collection_name, is_elasticsearch=True) - if mongo_id_field == elasticsearch_id_field: - return doc.get(mongo_id_field) - else: - mongo_id = doc.get(mongo_id_field) - elasticsearch_id = doc.get(elasticsearch_id_field) - if mongo_id == elasticsearch_id: - return mongo_id - elif elasticsearch_id is None: - return mongo_id - elif mongo_id is None: - return elasticsearch_id - else: - raise Exception("could not find doc_id for collection {} doc {}".format(collection_name, doc)) + if collection_name == "persons": + raise Exception("persons collection items don't have a single doc_id, you must match on multiple fields") + id_field = get_collection_id_field(collection_name) + return doc[id_field] -def update_es(collection_name, doc, is_new, es_index_name=None, es=None, data_db=None, app=None): +def update_es(collection_name, doc, is_new, es_index_name=None, es=None, app=None): app = current_app if not app else app es_index_name = app.es_data_db_index_name if not es_index_name else es_index_name es = app.es if not es else es - data_db = app.data_db if not data_db else data_db # index only the docs that are publicly available if doc_show_filter(collection_name, doc): body = deepcopy(doc) - # the given doc might come either from mongo or from elasticsearch - # here we try to get the doc id from one of them and save it in elasticsearch - elasticsearch_id_field = get_collection_id_field(collection_name, is_elasticsearch=True) - doc_id = get_doc_id(collection_name, doc) - body[elasticsearch_id_field] = doc_id + # adjust attributes for elasticsearch + if collection_name == "persons": + body["person_id"] = body.get("id", body.get("ID")) + body["first_name_lc"] = body["name_lc"][0] + body["last_name_lc"] = body["name_lc"][1] + # maps all known SEX values to normalized gender value + body["gender"] = {"F": "F", "M": "M", + None: "U", "": "U", "U": "U", "?": "U", "P": "U"}[body.get("SEX", "").strip()] # _id field is internal to mongo if '_id' in body: del body['_id'] - # id field has special meaning in elasticsearch (it is copied to correct attribute above in the id_field handling + # id field has special meaning in elasticsearch if 'id' in body: del body['id'] if "thumbnail" in body and "data" in body["thumbnail"]: # no need to have thumbnail data in elasticsearch # TODO: ensure we only store and use thumbnail from filesystem del body["thumbnail"]["data"] + # persons collection gets a fake header to support searching + if collection_name == "persons": + name = " ".join(body["name"]) if isinstance(body["name"], list) else body["name"] + body["Header"] = {"En": name, "He": name} # elasticsearch uses the header for completion field # this field does not support empty values, so we put a string with space here # this is most likely wrong, but works for now @@ -460,21 +456,16 @@ def update_es(collection_name, doc, is_new, es_index_name=None, es=None, data_db for lang in ("He", "En"): if body["Header"].get(lang) is None: body["Header"][lang] = '_' + if collection_name == "persons": + doc_id = "{}_{}_{}".format(body["tree_num"], body["tree_version"], body["person_id"]) + else: + doc_id = get_doc_id(collection_name, body) if is_new: uuids_to_str(body) es.index(index=es_index_name, doc_type=collection_name, id=doc_id, body=body) - return True, "indexed successfully" + return True, "indexed successfully (inserted)" else: - try: - es.update(index=es_index_name, doc_type=collection_name, id=doc_id, body={"doc": body}) - return True, "indexed successfully" - except elasticsearch.exceptions.NotFoundError as e: - # So it's in the DB, passes the SHOW_FILTER and not found in ES - # weird, but that's what we have. - # let's index it. - item = data_db[collection_name].find_one({'_id': doc_id}) - del item['_id'] - es.index(index=es_index_name, doc_type=collection_name, id=doc_id, body=item) - return True, "indexed successfully, by resorting to ES index function for {}:{} with {}".format(collection_name, doc_id, e) + es.update(index=es_index_name, doc_type=collection_name, id=doc_id, body=body) + return True, "indexed successfully (updated)" else: return True, "item should not be shown - so not indexed" diff --git a/bhs_api/persons.py b/bhs_api/persons.py index fca4f9f..cf6e681 100644 --- a/bhs_api/persons.py +++ b/bhs_api/persons.py @@ -19,6 +19,32 @@ "deceased", "tree_version"] +PERSONS_SEARCH_REQUIRES_ONE_OF = ["first", "last", "sex", "pob", "pom", "pod", "yob", "yom", "yod", "treenum"] + +PERSONS_SEARCH_DEFAULT_PARAMETERS = {"first": None, "first_t": "exact", + "last": None, "last_t": "exact", + "sex": None, + "pob": None, "pob_t": "exact", + "pom": None, "pom_t": "exact", + "pod": None, "pod_t": "exact", + "yob": None, "yob_t": "exact", "yob_v": None, + "yom": None, "yom_t": "exact", "yom_v": None, + "yod": None, "yod_t": "exact", "yod_v": None, + "treenum": None,} + +PERSONS_SEARCH_YEAR_PARAMS = (("yob", "birth_year"), + ("yod", "death_year"), + ("yom", "marriage_years")) + +PERSONS_SEARCH_TEXT_PARAMS = (("first", "first_name_lc"), + ("last", "last_name_lc"), + ("pob", "BIRT_PLAC_lc"), + ("pom", "MARR_PLAC_lc"), + ("pod", "DEAT_PLAC_lc"),) + +PERSONS_SEARCH_EXACT_PARAMS = (("sex", "gender"), + ("treenum", "tree_num")) + def is_living_person(is_deceased, birth_year): if is_deceased: diff --git a/bhs_api/v1_endpoints.py b/bhs_api/v1_endpoints.py index c1f9d9c..680af09 100755 --- a/bhs_api/v1_endpoints.py +++ b/bhs_api/v1_endpoints.py @@ -20,6 +20,7 @@ import pymongo import jinja2 import requests +import traceback from bhs_api import SEARCH_CHUNK_SIZE from bhs_api.utils import (get_conf, gen_missing_keys_error, binarize_image, @@ -31,6 +32,8 @@ from bhs_api.user import get_user from bhs_api import phonetic +from bhs_api.persons import (PERSONS_SEARCH_DEFAULT_PARAMETERS, PERSONS_SEARCH_REQUIRES_ONE_OF, + PERSONS_SEARCH_YEAR_PARAMS, PERSONS_SEARCH_TEXT_PARAMS, PERSONS_SEARCH_EXACT_PARAMS) v1_endpoints = Blueprint('v1', __name__) @@ -51,7 +54,7 @@ def custom_error(error): ''' -def es_search(q, size, collection=None, from_=0, sort=None, with_persons=False): +def es_search(q, size, collection=None, from_=0, sort=None, with_persons=False, **kwargs): if collection: # if user requested specific collections - we don't filter for persons (that's what user asked for!) collections = collection.split(",") @@ -59,11 +62,71 @@ def es_search(q, size, collection=None, from_=0, sort=None, with_persons=False): # we consider the with_persons to decide whether to include persons collection or not collections = [collection for collection in SEARCHABLE_COLLECTIONS if with_persons or collection != "persons"] - body = {"query": {"query_string": { - "fields": ['Header.En^2', 'Header.He^2', 'UnitText1.En', 'UnitText1.He'], - "query": q, - "default_operator": "and" - }}} + default_query = { + "query_string": { + "fields": ["Header.En^2", "Header.He^2", "UnitText1.En", "UnitText1.He"], + "query": q, + "default_operator": "and" + } + } + + if collection == "persons": + must_queries = [] + if q: + must_queries.append(default_query) + for year_param, year_attr in PERSONS_SEARCH_YEAR_PARAMS: + if kwargs[year_param]: + try: + year_value = int(kwargs[year_param]) + except Exception as e: + raise Exception("invalid value for {} ({}): {}".format(year_param, year_attr, kwargs[year_param])) + year_type_param = "{}_t".format(year_param) + year_type = kwargs[year_type_param] + if year_type == "pmyears": + year_type_value_param = "{}_v".format(year_param) + try: + year_type_value = int(kwargs[year_type_value_param]) + except Exception as e: + raise Exception("invalid value for {} ({}): {}".format(year_type_value_param, year_attr, kwargs[year_type_value_param])) + must_queries.append({"range": {year_attr: {"gte": year_value - year_type_value, "lte": year_value + year_type_value,}}}) + elif year_type == "exact": + must_queries.append({"term": {year_attr: year_value}}) + else: + raise Exception("invalid value for {} ({}): {}".format(year_type_param, year_attr, year_type)) + for text_param, text_attr in PERSONS_SEARCH_TEXT_PARAMS: + if kwargs[text_param]: + text_value = kwargs[text_param] + text_type_param = "{}_t".format(text_param) + text_type = kwargs[text_type_param] + if text_type == "exact": + must_queries.append({"term": {text_attr: text_value}}) + elif text_type == "like": + must_queries.append({"match": {text_attr: {"query": text_value, + "fuzziness": "AUTO"}}}) + elif text_type == "starts": + must_queries.append({"prefix": {text_attr: text_value}}) + else: + raise Exception("invalid value for {} ({}): {}".format(text_type, text_attr, text_type)) + for exact_param, exact_attr in PERSONS_SEARCH_EXACT_PARAMS: + if kwargs[exact_param]: + exact_value = kwargs[exact_param] + if exact_param == "sex" and exact_value not in ("F", "M", "U"): + raise Exception ("invalid value for {} ({}): {}".format(exact_param, exact_attr, exact_value)) + elif exact_param == "treenum": + try: + exact_value = int(exact_value) + except Exception as e: + raise Exception("invalid value for {} ({}): {}".format(exact_param, exact_attr, exact_value)) + must_queries.append({"term": {exact_attr: exact_value}}) + body = { + "query": { + "bool": { + "must": must_queries + } + } + } + else: + body = {"query": default_query} if sort == "abc": if phonetic.is_hebrew(q.strip()): # hebrew alphabetical sort @@ -77,15 +140,13 @@ def es_search(q, size, collection=None, from_=0, sort=None, with_persons=False): elif sort == "year" and collection == "photoUnits": body["sort"] = [{"UnitPeriod.PeriodStartDate.keyword": "asc"}, "_score"] try: - try: - collection = collection.split(',') - except: - pass current_app.logger.debug("es.search index={}, doc_type={} body={}".format(current_app.es_data_db_index_name, collections, json.dumps(body))) results = current_app.es.search(index=current_app.es_data_db_index_name, body=body, doc_type=collections, size=size, from_=from_) except elasticsearch.exceptions.ConnectionError as e: - current_app.logger.error('Error connecting to Elasticsearch: {}'.format(e.error)) - return None + current_app.logger.error('Error connecting to Elasticsearch: {}'.format(e)) + raise Exception("Error connecting to Elasticsearch: {}".format(e)) + except Exception as e: + raise Exception("Elasticsearch error: {}".format(e)) return results def _generate_credits(fn='credits.html'): @@ -373,22 +434,26 @@ def save_user_content(): def general_search(): args = request.args parameters = {'collection': None, 'size': SEARCH_CHUNK_SIZE, 'from_': 0, 'q': None, 'sort': None, "with_persons": False} + parameters.update(PERSONS_SEARCH_DEFAULT_PARAMETERS) + got_one_of_required_persons_params = False for param in parameters.keys(): if param in args: if param == "with_persons": parameters[param] = args[param].lower() in ["1", "yes", "true"] else: parameters[param] = args[param] - if not parameters['q']: - abort(400, 'You must specify a search query') - else: - rv = es_search(**parameters) - if not rv: - abort(500, 'Sorry, the search cluster appears to be down') - else: - for item in rv['hits']['hits']: - enrich_item(item['_source'], collection_name=item['_type']) + if param in PERSONS_SEARCH_REQUIRES_ONE_OF and parameters[param]: + got_one_of_required_persons_params = True + if parameters["q"] or (parameters["collection"] == "persons" and got_one_of_required_persons_params): + try: + rv = es_search(**parameters) + except Exception as e: + return humanify({"error": e.message}, 500) + for item in rv['hits']['hits']: + enrich_item(item['_source'], collection_name=item['_type']) return humanify(rv) + else: + return humanify({"error": "You must specify a search query"}, 400) @v1_endpoints.route('/wsearch') def wizard_search(): @@ -449,20 +514,21 @@ def get_suggestions(collection,string): ''' rv = {} try: + unlistify_item = lambda i: " ".join(i) if isinstance(i, (tuple, list)) else i if collection == "*": rv['starts_with'], rv['phonetic'] = get_completion_all_collections(string) rv['contains'] = {} # make all the words in the suggestion start with a capital letter - rv = {k: {kk: [i.title() for i in vv] for kk, vv in v.items()} for k, v in rv.items()} + rv = {k: {kk: [unlistify_item(i).title() for i in vv] for kk, vv in v.items()} for k, v in rv.items()} return humanify(rv) else: rv['starts_with'], rv['phonetic'] = get_completion(collection, string) rv['contains'] = [] # make all the words in the suggestion start with a capital letter - rv = {k: [i.title() for i in v] for k, v in rv.items()} + rv = {k: [unlistify_item(i).title() for i in v] for k, v in rv.items()} return humanify(rv) except Exception, e: - return humanify({"error": "unexpected exception getting completion data: {}".format(e)}, 500) + return humanify({"error": "unexpected exception getting completion data: {}".format(e), "traceback": traceback.format_exc()}, 500) diff --git a/conf/app_server.yaml b/conf/app_server.yaml index 30dedc4..1c1e90f 100644 --- a/conf/app_server.yaml +++ b/conf/app_server.yaml @@ -28,9 +28,11 @@ image_bucket: bhs-flat-pics thumbnail_bucket: bhs-thumbnails ftree_bucket_url: https://storage.googleapis.com/bhs-familytrees video_bucket_url: https://storage.googleapis.com/bhs-videos + # elastic search elasticsearch_host: localhost -elasticsearch_data_index: +elasticsearch_data_index: bhdata + # redis redis_host: localhost redis_port: 6379 diff --git a/conf/bhs_api_site b/conf/bhs_api_site index 082ad49..49b14ff 100644 --- a/conf/bhs_api_site +++ b/conf/bhs_api_site @@ -8,7 +8,7 @@ server { location /v1/docs { default_type text/html; - alias /home/bhs/api/docs/index.html; + alias /home/bhs/api/docs/_build/index.html; } location / { diff --git a/docs/README.md b/docs/README.md new file mode 100644 index 0000000..eec8c6f --- /dev/null +++ b/docs/README.md @@ -0,0 +1,5 @@ +# dbs-back documentation hub + +## API documentation + +The API documentation is served at http://devapi.dbs.bh.org.il/v1/docs diff --git a/docs/_build/README.md b/docs/_build/README.md new file mode 100644 index 0000000..3e507b8 --- /dev/null +++ b/docs/_build/README.md @@ -0,0 +1,7 @@ +# documentation source files + +This directory contains the api documentation files built from the _sources files + +**Important Notice** + +If you just want to read the documentation, go to https://github.com/Beit-Hatfutsot/dbs-back/tree/dev/docs \ No newline at end of file diff --git a/docs/_build/index.html b/docs/_build/index.html new file mode 100644 index 0000000..1e49582 --- /dev/null +++ b/docs/_build/index.html @@ -0,0 +1,445 @@ +API for Beit-Hatfutsot Databases Back to top

API for Beit-Hatfutsot Databases

Welcome to the docs for the API server of the museum of the Jewish people. +Read this if you think the Jewish people haven’t suffered enough.

+

Items

Item

+
    +
  • +

    Model (application/json)

    +
    {
    +          "LocationInMuseum": null,
    +          "Pictures": [
    +          {
    +              "PictureId": "00E201C7-BCD4-404A-B551-0D5B1DE8DEE3",
    +              "IsPreview": "0"
    +          },
    +          {
    +              "PictureId": "5A8D1CC0-3D01-4AB0-B515-4B27873703D8",
    +              "IsPreview": "1"
    +          },
    +          {
    +              "PictureId": "212BE375-83E7-440A-9C5A-AAE09BEB89B1",
    +              "IsPreview": "0"
    +          },
    +          {
    +              "PictureId": "29202878-0C3C-4DE6-BE00-B2A708693B2D",
    +              "IsPreview": "0"
    +          },
    +          {
    +              "PictureId": "5687F54F-66DC-4BCB-A6CD-FB9AEAD4D00A",
    +              "IsPreview": "0"
    +          }
    +          ],
    +          "PictureUnitsIds": "19652,1935,38107,4682,23069,",
    +          "related": [
    +          "image_ose-summer-camp-for-children-vilkoviskis-lithuania-1929-1930",
    +          "familyname_berlin",
    +          "luminary_moses-ben-nahman",
    +          "place_krefeld",
    +          "image_jewish-settlers-working-in-the-fields-of-gross-gaglow-germany-1930s",
    +          "familyname_weil"
    +          ],
    +          "UpdateDate": "2016-01-07 09:30:00",
    +          "OldUnitId": "HB001520.HTM-EB001338.HTM",
    +          "id": 189648,
    +          "UpdateUser": "simona",
    +          "PrevPictureFileNames": "01934000.JPG,00143500.JPG,03014600.JPG,00418900.JPG,02294100.JPG,",
    +          "PrevPicturePaths": "Photos\\00001024.scn\\01934000.JPG,Photos\\00000033.scn\\00143500.JPG,Photos\\00000639.scn\\03014600.JPG,Photos\\00000285.scn\\00418900.JPG,Photos\\00000807.scn\\02294100.JPG,",
    +          "PlaceTypeCode": 1,
    +          "TS": "\u0000\u0000\u0000\u0000\u0000LZo",
    +          "PlaceTypeDesc": {
    +          "En": "City",
    +          "He": "\u05e2\u05d9\u05e8"
    +          },
    +          "UnitType": 5,
    +          "UnitTypeDesc": "Place",
    +          "EditorRemarks": "hasavot from Places ",
    +          "thumbnail": {
    +          "path": "Photos/00000033.scn/00143500.JPG",
    +          "data": "..."
    +          },
    +          "RightsDesc": "Full",
    +          "Bibiliography": {
    +          "En": null,
    +          "He": "\u05d0\u05e0\u05e6\u05d9\u05e7\u05dc\u05d5\u05e4\u05d3\u05d9\u05d4 \u05d9\u05d5\u05d3\u05d0\u05d9\u05e7\u05d4 \n\u05de\u05db\u05d5\u05df \u05e7\u05d5\u05e0\u05d2\u05e8\u05e1 \u05d9\u05d4\u05d5\u05d3\u05d9 \u05e2\u05d5\u05dc\u05de\u05d9"
    +          },
    +          "UnitText1": {
    +          "En": "PARIS \n\nCapital of France \n\nIn 582, the date of the first documentary evidence of the presence of Jews in Paris, there was already a community with a synagogue. In 614 or 615, the sixth council of Paris decided that Jews who held public office, and their families, must convert to Christianity. From the 12th century on there was a Jewish quarter. According to one of the sources of Joseph ha- Kohen's Emek ha-Bakha, Paris Jews owned about half the land in Paris and the vicinity. They employed many Christian servants and the objects they took in pledge included even church vessels.\n\nFar more portentous was the blood libel which arose against the Jews of Blois in 1171. In 1182, Jews were expelled. The crown confiscated the houses of the Jews as well as the synagogue and the king gave 24 of them to the drapers of Paris and 18 to the furriers. When the Jews were permitted to return to the kingdom of France in 1198 they settled in Paris, in and around the present rue Ferdinand Duval, which became the Jewish quarter once again in the modern era.\n\nThe famous disputation on the Talmud was held in Paris in 1240. The Jewish delegation was led by Jehiel b. Joseph of Paris. After the condemnation of the Talmud, 24 cart-loads of Jewish books were burned in public in the Place de Greve, now the Place de l'Hotel de Ville. A Jewish moneylender called Jonathan was accused of desecrating the host in 1290. It is said that this was the main cause of the expulsion of 1306.\n\nTax rolls of the Jews of Paris of 1292 and 1296 give a good picture of their economic and social status. One striking fact is that a great many of them originated from the provinces. In spite of the prohibition on the settlement of Jews expelled from England, a number of recent arrivals from that country are listed. As in many other places, the profession of physician figures most prominently among the professions noted. The majority of the rest of the Jews engaged in moneylending and commerce. During the same period the composition of the Jewish community, which numbered at least 100 heads of families, changed to a large extent through migration and the number also declined to a marked degree. One of the most illustrious Jewish scholars of medieval France, Judah b. Isaac, known as Sir Leon of Paris, headed the yeshiva of Paris in the early years of the 13th century. He was succeeded by Jehiel b. Joseph, the Jewish leader at the 1240 disputation. After the wholesale destruction of\nJewish books on this occasion until the expulsion of 1306, the yeshivah of Paris produced no more scholars of note.\n\nIn 1315, a small number of Jews returned and were expelled again in 1322. The new community was formed in Paris in 1359. Although the Jews were under the protection of the provost of Paris, this was to no avail against the murderous attacks and looting in 1380 and 1382 perpetrated by a populace in revolt against the tax burden. King Charles VI relieved the Jews of responsibility for the valuable pledges which had been stolen from them on this occasion and granted them other financial concessions, but the community was unable to recover. In 1394, the community was struck by the Denis de Machaut affair. Machaut, a Jewish convert to Christianity, had disappeared and the Jews were accused of having murdered him or, at the very least, of having imprisoned him until he agreed to return to Judaism. Seven Jewish notables were condemned to death, but their sentence was commuted to a heavy fine allied to imprisonment until Machaut reappeared. This affair was a prelude to the \"definitive\" expulsion of the Jews from France in 1394.\n\nFrom the beginning of the 18th century the Jews of Metz applied to the authorities for permission to enter Paris on their business pursuits; gradually the periods of their stay in the capital increased and were prolonged. At the same time, the city saw the arrival of Jews from Bordeaux (the \"Portuguese\") and from Avignon. From 1721 to 1772 a police inspector was given special charge over the Jews.\nAfter the discontinuation of the office, the trustee of the Jews from 1777 was Jacob Rodrigues Pereire, a Jew from Bordeaux, who had charge over a group of Spanish and Portuguese Jews, while the German Jews (from Metz, Alsace, and Loraine) were led by Moses Eliezer Liefman Calmer, and those from Avignon by Israel Salom. The German Jews lived in the poor quarters of Saint-Martin and Saint-Denis, and those from Bordeaux, Bayonne, and Avignon inhabited the more luxurious quarters of Saint Germaine and Saint Andr\u00e9.\n\nLarge numbers of the Jews eked out a miserable living in peddling. The more well-to-do were moneylenders, military purveyors and traders in jewels. There were also some craftsmen among them. Inns preparing kosher food existed from 1721; these also served as prayer rooms. The first publicly acknowledged synagogue was opened in rue de Brisemiche in 1788. The number of Jews of Paris just before the revolution was probably no greater than 500. On Aug. 26, 1789 they presented the constituent assembly with a petition asking for the rights of citizens. Full citizenship rights were granted to the Spanish, Portuguese, and Avignon Jews on Jan. 28, 1790.\n\nAfter the freedom of movement brought about by emancipation, a large influx of Jews arrived in Paris, numbering 2,908 in 1809. When the Jewish population of Paris had reached between 6,000 and 7,000 persons, the Consistory began to build the first great synagogue. The Consistory established its first primary school in 1819.\n\nThe 30,000 or so Jews who lived in Paris in 1869 constituted about 40% of the Jewish population of France. The great majority originated from Metz, Alsace, Lorraine, and Germany, and there were already a few hundreds from Poland. Apart from a very few wealthy capitalists, the great majority of the Jews belonged to the middle economic level. The liberal professions also attracted numerous Jews; the community included an increasing number of professors, lawyers, and physicians. After 1881 the Jewish population increased with the influx of refugees from Poland, Russia, and the Slav provinces of Austria and Romania. At the same time, there was a marked increase in the anti-Semitic movement. The Dreyfus affair, from 1894, split the intellectuals of Paris into \"Dreyfusards\" and \"anti-Dreyfusards\" who frequently clashed on the streets, especially in the Latin Quarter. With the law separating church and state in 1905, the Jewish consistories lost their official status, becoming no more than private religious associations. The growing numbers of Jewish immigrants to Paris resented the heavy hand of a Consistory, which was largely under the control of Jews from Alsace and Lorraine, now a minority group. These immigrants formed the greater part of the 13,000 \"foreign\" Jews who enlisted in World War 1. Especially after 1918, Jews began to arrive from north Africa, Turkey, and the Balkans, and in greatly increased numbers from eastern Europe. Thus in 1939 there were around 150,000 Jews in Paris (over half the total in France). The Jews lived all over the city but there were large concentrations of them in the north and east. More than 150 landmanschaften composed of immigrants from eastern Europe and many charitable societies united large numbers of Jews, while at this period the Paris Consistory (which retained the name with its changed function) had no more than 6,000 members.\n\nOnly one of the 19th-century Jewish primary schools was still in existence in 1939, but a few years earlier the system of Jewish education which was strictly private in nature acquired a secondary school and a properly supervised religious education, for which the Consistory was responsible. Many great Jewish scholars were born and lived in Paris in the modern period. They included the Nobel Prize winners Rene Cassin and A. Lwoff. On June 14, 1940, the Wehrmacht entered Paris, which was proclaimed an open city. Most Parisians left, including the Jews. However, the population returned in the following weeks. A sizable number of well-known Jews fled to England and the USA. (Andre Maurois), while some, e.g. Rene Cassin and Gaston Palewski, joined General de Gaulle's free French movement in London. Parisian Jews were active from the very beginning in resistance movements. The march to the etoile on Nov. 11, 1940, of high school and university students, the first major public manifestation of resistance, included among its organizers Francis Cohen, Suzanne Dijan, and Bernard Kirschen.\n\nThe first roundups of Parisian Jews of foreign nationality took place in 1941; about 5,000 \"foreign\" Jews were deported on May 14, about 8,000 \"foreigners\" in August, and about 100 \"intellectuals\" on December 13. On July 16, 1942, 12,884 Jews were rounded up in Paris (including about 4,000 children). The Parisian Jews represented over half the 85,000 Jews deported from France to extermination camps in the east. During the night of Oct. 2-3, 1941, seven Parisian synagogues were attacked.\n\nSeveral scores of Jews fell in the Paris insurrection in August, 1944. Many streets in Paris and the outlying suburbs bear the names of Jewish heroes and martyrs of the Holocaust period and the memorial to the unknown Jewish martyr, a part of the Centre de documentation juive contemporaire, was erected in in 1956 in the heart of Paris.\n\nBetween 1955 and 1965, the Jewish community experienced a demographic transformation with the arrival of more than 300,000 Sephardi Jews from North Africa. These Jewish immigrants came primarily from Morocco, Tunisia and Egypt. At the time, Morocco and Tunisia were French protectorates unlike Algeria which was directly governed by France. Since their arrival, the Sephardi Jews of North Africa have remained the majority (60%) of French Jewry. \n\nIn 1968 Paris and its suburbs contained about 60% of the Jewish population of France. In 1968 it was estimated at between 300,000 and 350,000 (about 5% of the total population). In 1950, two-thirds of the Jews were concentrated in about a dozen of the poorer or commercial districts in the east of the city. The social and economic advancement of the second generation of east European immigrants, the influx of north Africans, and the gradual implementation of the urban renewal program caused a considerable change in the once Jewish districts and the dispersal of the Jews throughout other districts of Paris.\n\nBetween 1957 and 1966 the number of Jewish communities in the Paris region rose from 44 to 148. The Paris Consistory, traditionally presided over by a member of the Rothschild family, officially provides for all religious needs. Approximately 20 synagogues and meeting places for prayer observing Ashkenazi or Sephardi rites are affiliated with the Consistory, which also provides for the religious needs of new communities in the suburbs. This responsibility is shared by traditional orthodox elements, who, together with the reform and other independent groups, maintain another 30 or so synagogues. The orientation and information office of the Fonds social juif unifie had advised or assisted over 100,000 refugees from north Africa. It works in close cooperation with government services and social welfare and educational institutions of the community. Paris was one of the very few cities in the diaspora with a full-fledged Israel-type school, conducted by Israeli teachers according to an Israeli curriculum. \n\nThe Six-Day War (1967), which drew thousands of Jews into debates and\nPro-Israel demonstrations, was an opportunity for many of them to reassess their personal attitude toward the Jewish people. During the \"students' revolution\" of 1968 in nearby Nanterre and in the Sorbonne, young Jews played an outstanding role in the leadership of left-wing activists and often identified with Arab anti-Israel propaganda extolling the Palestinian organizations. Eventually, however, when the \"revolutionary\" wave subsided, it appeared that the bulk of Jewish students in Paris, including many supporters of various new left groups, remained loyal to Israel and strongly opposed Arab terrorism.\n\nAs of 2015, France was home to the third largest Jewish population in the world. It was also the largest in all of Europe. More than half the Jews in France live in the Paris metropolitan area. According to the World Jewish Congress, an estimated 350,000 Jews live in the city of Paris and its many districts. By 2014, Paris had become the largest Jewish city outside of Israel and the United States. Comprising 6% of the city\u2019s total population (2.2 million), the Jews of Paris are a sizeable minority. \n\nThere are more than twenty organizations dedicated to serving the Jewish community of Paris. Several offer social services while others combat anti-Semitism. There are those like the Paris Consistory which financially supports many of the city's congregations. One of the largest organizations is the Alliance Isra\u00e9lite Universelle which focuses on self-defense, human rights and Jewish education. The FSJU or Unified Social Jewish Fund assists in the absorption of new immigrants. Other major organizations include the ECJC (European Council of Jewish Communities), EAJCC (European Association of Jewish Communities), ACIP (Association Consitoriale Israelit\u00e9), CRIF (Representative Council of Jewish Institutions), and the UEJF (Jewish Students Union of France). \n\nBeing the third largest Jewish city behind New York and Los Angeles, Paris is home to numerous synagogues. By 2013, there were more than eighty three individual congregations. While the majority of these are orthodox, many conservative and liberal congregations can be found across Paris. During the 1980s, the city received an influx of orthodox Jews, primarily as a result of the Lubavitch movement which has since been very active in Paris and throughout France. \n\nApproximately 4% of school-age children in France are enrolled in Jewish day schools. In Paris, there are over thirty private Jewish schools. These include those associated with both the orthodox and liberal movements. Chabad Lubavitch has established many educational programs of its own. The Jewish schools in Paris range from the pre-school to High School level. There are additionally a number of Hebrew schools which enroll students of all ages.  \n\nAmong countless cultural institutions are museums and memorials which preserve the city's Jewish history. Some celebrate the works of Jewish artists while others commemorate the Holocaust and remember its victims. The Museum of Jewish art displays sketches by Mane-Katz, the paintings of Alphonse Levy and the lithographs of Chagall. At the Center of Contemporary Jewish Documentation (CDJC), stands the Memorial de la Shoah. Here, visitors can view the center's many Holocaust memorials including the Memorial of the Unknown Jewish Martyrs, the Wall of Names, and the Wall of the Righteous Among the Nations. Located behind the Notre Dame is the Memorial of Deportation, a memorial to the 200,000 Jews who were deported from Vichy France to the Nazi concentration camps. On the wall of a primary school on rue Buffault is a plaque commemorating the 12,000 Parisian Jewish children who died in Auschwitz following their deportation from France between 1942 and 1944.\n\nFor decades, Paris has been the center of the intellectual and cultural life of French Jewry. The city offers a number of institutions dedicated to Jewish history and culture. Located at the Alliance Isra\u00e9lite Universalle is the largest Jewish library in all of Europe. At the Biblioth\u00e8que Medem is the Paris Library of Yiddish. The Mercaz Rashi is home to the University Center for Jewish Studies, a well known destination for Jewish education. One of the most routinely visited cultural centers in Paris is the Chabad House. As of 2014, it was the largest in the world. The Chabad House caters to thousands of Jewish students from Paris and elsewhere every year.\n\nLocated in the city of Paris are certain districts, many of them historic, which are well known for their significant Jewish populations. One in particular is Le Marais \u201cThe Marsh\u201d, which had long been an aristocratic district of Paris until much of the city\u2019s nobility began to move. By the end of the 19th century, the district had become an active commercial area. It was at this time that thousands of Ashkenazi Jews fleeing persecution in Eastern Europe began to settle Le Marais, bringing their specialization in clothing with them. Arriving from Romania, Austria, Hungary and Russia, they developed a new community alongside an already established community of Parisian Jews. As Jewish immigration continued into the mid 20th century, this Jewish quarter in the fourth arrondissement of Paris became known as the \u201cPletzl\u201d, a Yiddish term meaning \u201clittle place\u201d. Despite having been targeted by the Nazis during World War II, the area has continued to be a major center of the Paris Jewish community. Since the 1990s, the area has grown. Along the Rue des Rosiers are a number of Jewish restaurants, bookstores, kosher food outlets and synagogues. Another notable area with a sizeable Jewish community is in the city\u2019s 9th district. Known as the Faubourg-Montmarte, it is home to several synagogues, kosher restaurants as well as many offices to a number of Jewish organizations. \n\nWith centuries-old Jewish neighborhoods, Paris has its share of important Jewish landmarks. Established in 1874 is the Rothschild Synagogue and while it may not be ancient, its main attraction is its rabbis who are well known for being donned in Napoleonic era apparel. The synagogue on Rue Buffault opened in 1877 and was the first synagogue in Paris to adopt the Spanish/Portuguese rite. Next to the synagogue is a memorial dedicated to the 12,000 children who perished in the Holocaust. The Copernic synagogue is the city\u2019s largest non-orthodox congregation. In 1980 it was the target of an anti-Semitic bombing which led to the death of four people during the celebration of Simchat Torah, the first attack against the Jewish people in France since World War II. In the 1970s, the remains of what many believed to have been a Yeshiva were found under the Rouen Law Courts. Just an hour outside of Paris, this site is presumed to be from the 12th century when Jews comprised nearly 20% of the total population. \n\nServing many of the medical needs of the Jewish community of Paris are organizations such as the OSE and CASIP. While the Rothschild hospital provides general medical care, the OSE or Society for the Health of the Jewish Population, offers several health centers around the city. CASIP focuses on providing the community social services include children and elderly homes. \n\nBeing a community of nearly 400,000 people, the Jews of Paris enjoy a diversity of media outlets centered on Jewish culture. Broadcasted every week are Jewish television programs which include news and a variety of entertainment. On radio are several stations such as Shalom Paris which airs Jewish music, news and programming. Circulating throughout Paris are two weekly Jewish papers and a number of monthly journals. One of the city\u2019s major newspapers is the Actualit\u00e9 Juive. There are also online journals such as the Israel Infos and Tribute Juive. ",
    +          "He": "\u05e4\u05e8\u05d9\u05e1\n\n\u05d1\u05d9\u05e8\u05ea \u05e6\u05e8\u05e4\u05ea.\n\n\u05e2\u05d3\u05d5\u05ea \u05e8\u05d0\u05e9\u05d5\u05e0\u05d4 \u05e2\u05dc \u05e7\u05d9\u05d5\u05dd \u05d9\u05d4\u05d5\u05d3\u05d9\u05dd \u05d1\u05e4\u05e8\u05d9\u05e1 \u05e0\u05e9\u05ea\u05de\u05e8\u05d4 \u05de\u05e1\u05d5\u05e3 \u05d4\u05de\u05d0\u05d4 \u05d4-6 \u05d5\u05db\u05d1\u05e8 \u05d0\u05d6 \u05d4\u05d9\u05d9\u05ea\u05d4 \u05d1\u05de\u05e7\u05d5\u05dd \u05e7\u05d4\u05d9\u05dc\u05d4 \u05d9\u05d4\u05d5\u05d3\u05d9\u05ea \u05d5\u05dc\u05d4 \u05d1\u05d9\u05ea-\u05db\u05e0\u05e1\u05ea \u05de\u05e9\u05dc\u05d4. \u05d4\u05e7\u05d4\u05d9\u05dc\u05d4 \u05e7\u05d9\u05d9\u05de\u05d4 \u05d9\u05d7\u05e1\u05d9 \u05e9\u05db\u05e0\u05d5\u05ea \u05ea\u05e7\u05d9\u05e0\u05d9\u05dd \u05e2\u05dd \u05e9\u05d0\u05e8 \u05ea\u05d5\u05e9\u05d1\u05d9 \u05d4\u05e2\u05d9\u05e8.\n\n\u05d4\u05d0\u05d9\u05e1\u05d5\u05e8 \u05e2\u05dc \u05e7\u05d1\u05dc\u05ea \u05d9\u05d4\u05d5\u05d3\u05d9\u05dd \u05dc\u05de\u05e9\u05e8\u05d4 \u05e6\u05d9\u05d1\u05d5\u05e8\u05d9\u05ea, \u05e9\u05e0\u05e7\u05d1\u05e2 \u05d1\u05e7\u05d5\u05e0\u05e1\u05d9\u05dc \u05d4\u05e9\u05d9\u05e9\u05d9 \u05d1\u05e4\u05e8\u05d9\u05e1 (614 \u05d0\u05d5 615), \u05de\u05e2\u05d9\u05d3 \u05e2\u05dc \u05de\u05e2\u05de\u05d3\u05dd \u05d4\u05e8\u05dd \u05d1\u05d7\u05d1\u05e8\u05d4.\n\n\u05de\u05ea\u05d7\u05d9\u05dc\u05ea \u05d4\u05de\u05d0\u05d4 \u05d4-12 \u05d4\u05d9\u05d4 \u05d1\u05e2\u05d9\u05e8 \u05e8\u05d5\u05d1\u05e2 \u05de\u05d9\u05d5\u05d7\u05d3 \u05dc\u05d9\u05d4\u05d5\u05d3\u05d9\u05dd, \u05d5\u05dc\u05d3\u05d1\u05e8\u05d9 \u05d0\u05d7\u05d3 \u05d4\u05de\u05e7\u05d5\u05e8\u05d5\u05ea \u05e9\u05dc \u05d9\u05d5\u05e1\u05e3 \u05d4\u05db\u05d4\u05df, \"\u05e1\u05e4\u05e8 \u05d4\u05d1\u05db\u05d0\", \u05d4\u05d9\u05d5 \u05d1\u05d1\u05e2\u05dc\u05d5\u05ea \u05d9\u05d4\u05d5\u05d3\u05d9\u05ea \u05db\u05de\u05d7\u05e6\u05d9\u05ea \u05d4\u05d0\u05d3\u05de\u05d5\u05ea \u05d1\u05e4\u05e8\u05d9\u05e1 \u05d5\u05e1\u05d1\u05d9\u05d1\u05ea\u05d4. \u05d4\u05d9\u05d5 \u05dc\u05d9\u05d4\u05d5\u05d3\u05d9\u05dd \u05d4\u05e8\u05d1\u05d4 \u05e2\u05d1\u05d3\u05d9\u05dd \u05d5\u05e9\u05e4\u05d7\u05d5\u05ea, \u05d5\u05d1\u05d9\u05df \u05d4\u05e4\u05e7\u05d3\u05d5\u05e0\u05d5\u05ea \u05e9\u05d4\u05d9\u05d5 \u05dc\u05d5\u05e7\u05d7\u05d9\u05dd \u05dc\u05d4\u05d1\u05d8\u05d7\u05ea \u05d4\u05d4\u05dc\u05d5\u05d5\u05d0\u05d5\u05ea \u05d4\u05d9\u05d5 \u05d2\u05dd \u05db\u05dc\u05d9 \u05e4\u05d5\u05dc\u05d7\u05df \u05e0\u05d5\u05e6\u05e8\u05d9\u05d9\u05dd.\n\n\u05e2\u05dc\u05d9\u05dc\u05ea-\u05d3\u05dd \u05e2\u05dc \u05d9\u05d4\u05d5\u05d3\u05d9 \u05d1\u05dc\u05d5\u05d0\u05d4 (1171) \u05e2\u05d5\u05e8\u05e8\u05d4 \u05e1\u05e2\u05e8\u05ea \u05e8\u05d5\u05d7\u05d5\u05ea \u05d2\u05dd \u05d1\u05e4\u05e8\u05d9\u05e1, \u05d5\u05d4\u05d9\u05d9\u05ea\u05d4 \u05d1\u05d9\u05df \u05d4\u05d2\u05d5\u05e8\u05de\u05d9\u05dd \u05dc\u05d2\u05d9\u05e8\u05d5\u05e9\u05dd \u05de\u05d4\u05e2\u05d9\u05e8 \u05d1\u05e9\u05e0\u05ea 1182. \u05d0\u05ea \u05d1\u05ea\u05d9 \u05d4\u05d9\u05d4\u05d5\u05d3\u05d9\u05dd \u05d7\u05d9\u05dc\u05e7 \u05d4\u05de\u05dc\u05da \u05d1\u05d9\u05df \u05e1\u05d5\u05d7\u05e8\u05d9 \u05d4\u05d0\u05e8\u05d9\u05d2\u05d9\u05dd \u05d5\u05d4\u05e4\u05e8\u05d5\u05d5\u05ea \u05d1\u05e2\u05d9\u05e8.\n\n\u05db\u05e2\u05d1\u05d5\u05e8 16 \u05e9\u05e0\u05d4 \u05d4\u05d5\u05ea\u05e8 \u05dc\u05d9\u05d4\u05d5\u05d3\u05d9\u05dd \u05dc\u05d7\u05d6\u05d5\u05e8 \u05dc\u05e4\u05e8\u05d9\u05e1. \u05d4\u05e4\u05e2\u05dd \u05d4\u05ea\u05d9\u05d9\u05e9\u05d1\u05d5 \u05d1\u05d0\u05d9\u05d6\u05d5\u05e8-\u05de\u05d2\u05d5\u05e8\u05d9\u05dd, \u05e9\u05e9\u05d9\u05de\u05e9 \u05d0\u05d5\u05ea\u05dd \u05d2\u05dd \u05d1\u05e2\u05ea \u05d4\u05d7\u05d3\u05e9\u05d4.\n\n\u05d1\u05d9\u05de\u05d9\u05d5 \u05e9\u05dc \u05dc\u05d5\u05d0\u05d9 \u05d4-9 \u05e0\u05e2\u05e8\u05da \u05d1\u05e4\u05e8\u05d9\u05e1 \u05d4\u05d5\u05d5\u05d9\u05db\u05d5\u05d7 \u05d4\u05de\u05e4\u05d5\u05e8\u05e1\u05dd \u05e2\u05dc \u05d4\u05ea\u05dc\u05de\u05d5\u05d3 (1240), \u05e2\u05dd \u05e8' \u05d9\u05d7\u05d9\u05d0\u05dc \u05d1\u05df \u05d9\u05d5\u05e1\u05e3 \u05d1\u05e8\u05d0\u05e9 \u05d4\u05de\u05e9\u05dc\u05d7\u05ea \u05d4\u05d9\u05d4\u05d5\u05d3\u05d9\u05ea \u05d5\u05d4\u05de\u05d5\u05de\u05e8 \u05e0\u05d9\u05e7\u05d5\u05dc\u05d0\u05e1 \u05d3\u05d5\u05e0\u05d9\u05df \u05d1\u05e6\u05d3 \u05e9\u05db\u05e0\u05d2\u05d3. \u05d1\u05ea\u05d5\u05dd \u05d4\u05d5\u05d5\u05d9\u05db\u05d5\u05d7 \u05d4\u05d5\u05e2\u05dc\u05d5 \u05e2\u05dc \u05d4\u05d0\u05e9 \u05d1\u05d0\u05d7\u05ea \u05de\u05db\u05d9\u05db\u05e8\u05d5\u05ea \u05d4\u05e2\u05d9\u05e8 (\u05db\u05d9\u05d5\u05dd \"\u05e4\u05dc\u05d0\u05e1 \u05d3\u05d4 \u05dc'\u05d4\u05d5\u05d8\u05dc \u05d3\u05d4 \u05d5\u05d9\u05dc) \u05e1\u05e4\u05e8\u05d9 \u05e7\u05d5\u05d3\u05e9 \u05e9\u05d4\u05d5\u05d1\u05d0\u05d5 \u05dc\u05de\u05e7\u05d5\u05dd \u05d1-24 \u05e2\u05d2\u05dc\u05d5\u05ea \u05e1\u05d5\u05e1\u05d9\u05dd.\n\n\u05d1- 1290 \u05d4\u05d5\u05d0\u05e9\u05dd \u05d9\u05d4\u05d5\u05d3\u05d9 \u05d1\u05d7\u05d9\u05dc\u05d5\u05dc \u05dc\u05d7\u05dd \u05d4\u05e7\u05d5\u05d3\u05e9; \u05d4\u05d4\u05e1\u05ea\u05d4 \u05e9\u05e0\u05ea\u05dc\u05d5\u05d5\u05ea\u05d4 \u05dc\u05db\u05da \u05d4\u05d9\u05d9\u05ea\u05d4 \u05d4\u05e1\u05d9\u05d1\u05d4 \u05d4\u05e2\u05d9\u05e7\u05e8\u05d9\u05ea \u05dc\u05d2\u05d9\u05e8\u05d5\u05e9 \u05e9\u05dc 1306. \u05de\u05e8\u05e9\u05d9\u05de\u05d5\u05ea \u05d4\u05de\u05e1\u05d9\u05dd \u05e9\u05dc \u05d0\u05d5\u05ea\u05df \u05d4\u05e9\u05e0\u05d9\u05dd \u05de\u05ea\u05d1\u05e8\u05e8, \u05e9\u05e8\u05d1\u05d9\u05dd \u05de\u05d9\u05d4\u05d5\u05d3\u05d9 \u05e4\u05e8\u05d9\u05e1 \u05d4\u05d2\u05d9\u05e2\u05d5 \u05dc\u05de\u05e7\u05d5\u05dd \u05de\u05e2\u05e8\u05d9-\u05e9\u05d3\u05d4, \u05d5\u05d0\u05d7\u05e8\u05d9 1290 \u05e7\u05dc\u05d8\u05d4 \u05d4\u05e7\u05d4\u05d9\u05dc\u05d4, \u05dc\u05de\u05e8\u05d5\u05ea \u05d4\u05d0\u05d9\u05e1\u05d5\u05e8 \u05d4\u05e8\u05e9\u05de\u05d9, \u05d2\u05dd \u05de\u05d2\u05d5\u05e8\u05e9\u05d9\u05dd \u05de\u05d0\u05e0\u05d2\u05dc\u05d9\u05d4. \u05d1\u05d9\u05df \u05d1\u05e2\u05dc\u05d9 \u05d4\u05de\u05e7\u05e6\u05d5\u05e2\u05d5\u05ea \u05d1\u05d5\u05dc\u05d8\u05d9\u05dd \u05d4\u05d9\u05d5 \u05e8\u05d5\u05e4\u05d0\u05d9\u05dd \u05d9\u05d4\u05d5\u05d3\u05d9\u05dd, \u05d0\u05d1\u05dc \u05d4\u05e8\u05d5\u05d1 \u05d4\u05de\u05db\u05e8\u05d9\u05e2 \u05e2\u05e1\u05e7 \u05d1\u05d4\u05dc\u05d5\u05d5\u05d0\u05ea \u05db\u05e1\u05e4\u05d9\u05dd \u05d5\u05d1\u05de\u05e1\u05d7\u05e8. \u05d4\u05e7\u05d4\u05d9\u05dc\u05d4, \u05e9\u05de\u05e0\u05ea\u05d4 \u05d0\u05d6 \u05db\u05de\u05d0\u05d4 \u05d1\u05ea\u05d9-\u05d0\u05d1, \u05e0\u05ea\u05e8\u05d5\u05e9\u05e9\u05d4 \u05e2\u05d3 \u05de\u05d4\u05e8\u05d4 \u05d5\u05e8\u05d1\u05d9\u05dd \u05e2\u05d6\u05d1\u05d5 \u05d0\u05ea \u05d4\u05e2\u05d9\u05e8 \u05e2\u05d5\u05d3 \u05dc\u05e4\u05e0\u05d9 \u05d4\u05d2\u05d9\u05e8\u05d5\u05e9. \u05d9\u05e9\u05d9\u05d1\u05ea \u05e4\u05e8\u05d9\u05e1 \u05d9\u05e8\u05d3\u05d4 \u05de\u05d2\u05d3\u05d5\u05dc\u05ea\u05d4 \u05d0\u05d7\u05e8\u05d9 \u05e9\u05e8\u05d9\u05e4\u05ea \u05d4\u05ea\u05dc\u05de\u05d5\u05d3 \u05d5\u05d2\u05d9\u05e8\u05d5\u05e9 1306.\n\n\u05d1-1315 \u05d7\u05d6\u05e8\u05d5 \u05de\u05e2\u05d8\u05d9\u05dd \u05d5\u05d2\u05d5\u05e8\u05e9\u05d5 \u05e9\u05d5\u05d1 \u05d1-1322. \u05d4\u05d9\u05d9\u05e9\u05d5\u05d1 \u05d4\u05ea\u05d7\u05d3\u05e9 \u05d1\u05e9\u05e0\u05ea 1359 \u05d5\u05d0\u05e3 \u05e9\u05d6\u05db\u05d4 \u05d1\u05d7\u05e1\u05d5\u05ea \u05d4\u05e9\u05dc\u05d8\u05d5\u05e0\u05d5\u05ea \u05d4\u05e6\u05d1\u05d0\u05d9\u05d9\u05dd \u05d1\u05e2\u05d9\u05e8 \u05dc\u05d0 \u05e0\u05d9\u05e6\u05dc \u05de\u05d9\u05d3\u05d9 \u05d4\u05d4\u05de\u05d5\u05df \u05d1\u05d4\u05ea\u05de\u05e8\u05d3\u05d5\u05ea \u05e0\u05d2\u05d3 \u05e0\u05d8\u05dc \u05d4\u05de\u05d9\u05e1\u05d9\u05dd \u05d1\u05e9\u05e0\u05d9\u05dd 1380, 1382. \u05d4\u05de\u05dc\u05da \u05e9\u05d0\u05e8\u05dc \u05d4-6 \u05d0\u05de\u05e0\u05dd \u05e4\u05d8\u05e8 \u05d0\u05ea \u05d4\u05d9\u05d4\u05d5\u05d3\u05d9\u05dd \u05de\u05d0\u05d7\u05e8\u05d9\u05d5\u05ea \u05dc\u05e4\u05e7\u05d3\u05d5\u05e0\u05d5\u05ea \u05d4\u05d9\u05e7\u05e8\u05d9\u05dd \u05e9\u05e0\u05d2\u05d6\u05dc\u05d5 \u05de\u05d4\u05dd \u05d5\u05d4\u05e2\u05e0\u05d9\u05e7 \u05dc\u05d4\u05dd \u05d4\u05e7\u05dc\u05d5\u05ea \u05d0\u05d7\u05e8\u05d5\u05ea, \u05d0\u05d1\u05dc \u05d4\u05e7\u05d4\u05d9\u05dc\u05d4 \u05e9\u05d5\u05d1 \u05dc\u05d0 \u05d4\u05ea\u05d0\u05d5\u05e9\u05e9\u05d4. \u05de\u05db\u05d4 \u05e0\u05d5\u05e1\u05e4\u05ea \u05d4\u05d5\u05e0\u05d7\u05ea\u05d4 \u05e2\u05dc\u05d9\u05d4 \u05d1\u05e4\u05e8\u05e9\u05ea \u05d3\u05e0\u05d9\u05e1 \u05d3\u05d4 \u05de\u05d0\u05e9\u05d5, \u05de\u05d5\u05de\u05e8 \u05e9\u05e0\u05e2\u05dc\u05dd \u05d5\u05d4\u05d9\u05d4\u05d5\u05d3\u05d9\u05dd \u05d4\u05d5\u05d0\u05e9\u05de\u05d5 \u05d1\u05e8\u05e6\u05d9\u05d7\u05ea\u05d5; \u05e2\u05dc \u05e9\u05d1\u05e2\u05d4 \u05de\u05e8\u05d0\u05e9\u05d9 \u05d4\u05e2\u05d3\u05d4 \u05e0\u05d2\u05d6\u05e8 \u05d3\u05d9\u05df- \u05de\u05d5\u05d5\u05ea, \u05d5\u05d4\u05d5\u05d7\u05dc\u05e3 \u05d1\u05e7\u05e0\u05e1 \u05db\u05d1\u05d3 \u05d5\u05d1\u05de\u05d0\u05e1\u05e8. \u05d4\u05d3\u05d1\u05e8 \u05d0\u05d9\u05e8\u05e2 \u05e2\u05dc \u05e1\u05e3 \u05d4\u05d2\u05d9\u05e8\u05d5\u05e9 \u05d4\u05db\u05dc\u05dc\u05d9 \u05de\u05e6\u05e8\u05e4\u05ea \u05d1-1394. \u05d1\u05d9\u05df \u05d2\u05d3\u05d5\u05dc\u05d9 \u05d4\u05e7\u05d4\u05d9\u05dc\u05d4 \u05e2\u05d3 \u05d2\u05d9\u05e8\u05d5\u05e9 \"\u05e1\u05d5\u05e4\u05d9\" \u05d6\u05d4 \u05d4\u05d9\u05d5 \u05d7\u05db\u05de\u05d9 \u05e4\u05e8\u05d9\u05e1 \u05de\u05df \u05d4\u05de\u05d0\u05d4 \u05d4-12, \u05e8' \u05e9\u05dc\u05de\u05d4 \u05d1\u05df \u05de\u05d0\u05d9\u05e8 (\u05d4\u05e8\u05e9\u05d1\"\u05dd) \u05d5\u05e8' \u05d9\u05e2\u05e7\u05d1 \u05d1\u05df \u05de\u05d0\u05d9\u05e8 (\u05e8\u05d1\u05d9\u05e0\u05d5 \u05ea\u05dd); \u05e8\u05d0\u05e9 \u05d4\u05d9\u05e9\u05d9\u05d1\u05d4 \u05e8' \u05de\u05ea\u05ea\u05d9\u05d4\u05d5 \u05d2\u05d0\u05d5\u05df \u05d5\u05d1\u05e0\u05d5 \u05d4\u05e4\u05d5\u05e1\u05e7 \u05d9\u05d7\u05d9\u05d0\u05dc, \u05d1\u05e2\u05dc\u05d9 \u05d4\u05ea\u05d5\u05e1\u05e4\u05d5\u05ea \u05d9' \u05d9\u05d5\u05dd-\u05d8\u05d5\u05d1 \u05d5\u05e8' \u05d7\u05d9\u05d9\u05dd \u05d1\u05df \u05d7\u05e0\u05e0\u05d0\u05dc \u05d4\u05db\u05d4\u05df, \u05d4\u05e4\u05d5\u05e1\u05e7 \u05d9' \u05d0\u05dc\u05d9\u05d4\u05d5 \u05d1\u05df \u05d9\u05d4\u05d5\u05d3\u05d4 \u05d5\u05e8' \u05d9\u05e2\u05e7\u05d1 \u05d1\u05df \u05e9\u05de\u05e2\u05d5\u05df. \u05d1\u05de\u05d0\u05d4 \u05d4-13 - \u05e8\u05d0\u05e9 \u05d4\u05d9\u05e9\u05d9\u05d1\u05d4 \u05e8' \u05d9\u05d4\u05d5\u05d3\u05d4 \u05d1\u05df \u05d9\u05e6\u05d7\u05e7 \u05d5\u05d9\u05d5\u05e8\u05e9\u05d5 \u05e8' \u05d9\u05d7\u05d9\u05d0\u05dc \u05d1\u05df \u05d9\u05d5\u05e1\u05e3, \u05d5\u05d1\u05de\u05d0\u05d4 \u05d4-14 - \u05e8\u05d0\u05e9 \u05d4\u05d9\u05e9\u05d9\u05d1\u05d4 \u05d4\u05e8\u05d1 \u05d4\u05e8\u05d0\u05e9\u05d9 \u05e9\u05dc \u05e6\u05e8\u05e4\u05ea \u05de\u05ea\u05ea\u05d9\u05d4\u05d5 \u05d1\u05df \u05d9\u05d5\u05e1\u05e3.\n\n\u05d1\u05ea\u05d7\u05d9\u05dc\u05ea \u05d4\u05de\u05d0\u05d4 \u05d4-18 \u05d4\u05d5\u05ea\u05e8 \u05dc\u05d9\u05d4\u05d5\u05d3\u05d9\u05dd \u05de\u05de\u05e5 \u05e9\u05d1\u05d0\u05dc\u05d6\u05d0\u05e1 \u05dc\u05d1\u05e7\u05e8 \u05d1\u05e4\u05e8\u05d9\u05e1 \u05dc\u05e8\u05d2\u05dc \u05e2\u05e1\u05e7\u05d9\u05dd, \u05d5\u05d1\u05de\u05e8\u05d5\u05e6\u05ea \u05d4\u05d6\u05de\u05df \u05d4\u05d5\u05d0\u05e8\u05db\u05d4 \u05d9\u05d5\u05ea\u05e8 \u05d5\u05d9\u05d5\u05ea\u05e8 \u05ea\u05e7\u05d5\u05e4\u05ea \u05e9\u05d4\u05d5\u05ea\u05dd \u05d1\u05e2\u05d9\u05e8. \u05dc\u05e6\u05d3\u05dd \u05d4\u05d2\u05d9\u05e2\u05d5 \u05dc\u05e2\u05d9\u05e8 \u05d9\u05d4\u05d5\u05d3\u05d9\u05dd \u05de\u05d1\u05d5\u05e8\u05d3\u05d5 (\u05d4\"\u05e4\u05d5\u05e8\u05d8\u05d5\u05d2\u05d9\u05d6\u05d9\u05dd\") \u05d5\u05de\u05d0\u05d5\u05d5\u05d9\u05e0\u05d9\u05d5\u05df. \u05d1\u05de\u05e9\u05d8\u05e8\u05ea \u05e4\u05e8\u05d9\u05e1 \u05e0\u05ea\u05de\u05e0\u05d4 \u05de\u05e4\u05e7\u05d7 \u05de\u05d9\u05d5\u05d7\u05d3 \u05dc\u05e2\u05e0\u05d9\u05e0\u05d9 \u05d9\u05d4\u05d5\u05d3\u05d9\u05dd. \u05d4\u05de\u05e9\u05e8\u05d4 \u05d1\u05d5\u05d8\u05dc\u05d4, \u05d5\u05de-1777 \u05e9\u05d9\u05de\u05e9\u05d5 \u05d9\u05d4\u05d5\u05d3\u05d9\u05dd \u05db\u05de\u05de\u05d5\u05e0\u05d9\u05dd: \u05d9\u05e2\u05e7\u05d1 \u05e8\u05d5\u05d3\u05e8\u05d9\u05d2\u05d6 \u05e4\u05e8\u05d9\u05d9\u05e8\u05d0 - \u05e2\u05dc \u05d9\u05d5\u05e6\u05d0\u05d9 \u05e1\u05e4\u05e8\u05d3 \u05d5\u05e4\u05d5\u05e8\u05d8\u05d5\u05d2\u05d0\u05dc, \u05de\u05e9\u05d4 \u05d0\u05dc\u05d9\u05e2\u05d6\u05e8 \u05dc\u05d9\u05e4\u05de\u05df \u05e7\u05d0\u05dc\u05de\u05e8 - \u05e2\u05dc \u05d9\u05d5\u05e6\u05d0\u05d9 \u05d2\u05e8\u05de\u05e0\u05d9\u05d4 \u05d5\u05d9\u05e9\u05e8\u05d0\u05dc \u05e9\u05dc\u05d5\u05dd - \u05e2\u05dc \u05d9\u05d4\u05d5\u05d3\u05d9 \u05d0\u05d5\u05d5\u05d9\u05e0\u05d9\u05d5\u05df. \u05d4\"\u05d2\u05e8\u05de\u05e0\u05d9\u05dd\" \u05d9\u05e9\u05d1\u05d5 \u05d1\u05e9\u05db\u05d5\u05e0\u05d5\u05ea \u05d4\u05d3\u05dc\u05d5\u05ea \u05e1\u05e0\u05d8-\u05de\u05d0\u05e8\u05d8\u05df \u05d5\u05e1\u05e0\u05d8-\u05d3\u05e0\u05d9, \u05d4\u05d0\u05d7\u05e8\u05d9\u05dd \u05d1\u05d0\u05de\u05d9\u05d3\u05d5\u05ea \u05de\u05e1\u05d5\u05d2 \u05e1\u05e0\u05d8-\u05d2'\u05e8\u05de\u05df \u05d5\u05e1\u05e0\u05d8-\u05d0\u05e0\u05d3\u05e8\u05d9\u05d9. \u05d9\u05d4\u05d5\u05d3\u05d9\u05dd \u05e8\u05d1\u05d9\u05dd \u05e2\u05e1\u05e7\u05d5 \u05d1\u05e8\u05d5\u05db\u05dc\u05d5\u05ea \u05d5\u05d1\u05de\u05db\u05d9\u05e8\u05ea \u05d1\u05d2\u05d3\u05d9\u05dd \u05de\u05e9\u05d5\u05de\u05e9\u05d9\u05dd. \u05d4\u05de\u05d1\u05d5\u05e1\u05e1\u05d9\u05dd \u05d9\u05d5\u05ea\u05e8 \u05d4\u05d9\u05d5 \u05de\u05dc\u05d5\u05d5\u05d9\u05dd \u05d1\u05e8\u05d9\u05d1\u05d9\u05ea, \u05e1\u05e4\u05e7\u05d9 \u05e1\u05d5\u05e1\u05d9\u05dd \u05dc\u05e6\u05d1\u05d0 \u05d5\u05e1\u05d5\u05d7\u05e8\u05d9 \u05ea\u05db\u05e9\u05d9\u05d8\u05d9\u05dd. \u05d4\u05d9\u05d5 \u05d2\u05dd \u05e2\u05d5\u05d1\u05d3\u05d9 \u05d7\u05e8\u05d9\u05ea\u05d4 \u05d5\u05e8\u05d9\u05e7\u05de\u05d4.\n\n\u05d0\u05db\u05e1\u05e0\u05d9\u05d5\u05ea \u05dc\u05d0\u05d5\u05db\u05dc \u05db\u05e9\u05e8 \u05e0\u05e4\u05ea\u05d7\u05d5 \u05d1-1721 \u05d5\u05e9\u05d9\u05de\u05e9\u05d5 \u05d2\u05dd \u05db\"\u05de\u05e0\u05d9\u05d9\u05e0\u05d9\u05dd\" \u05d7\u05e9\u05d0\u05d9\u05d9\u05dd. \u05d1\u05d9\u05ea-\u05db\u05e0\u05e1\u05ea \u05e8\u05d0\u05e9\u05d5\u05df \u05dc\u05d0 \u05e0\u05e4\u05ea\u05d7 \u05d0\u05dc\u05d0 \u05d1- 1788. \u05e2\u05e8\u05d1 \u05d4\u05de\u05d4\u05e4\u05d9\u05db\u05d4 \u05dc\u05d0 \u05d9\u05e9\u05d1\u05d5 \u05d1\u05e4\u05e8\u05d9\u05e1 \u05d9\u05d5\u05ea\u05e8 \u05de-500 \u05d9\u05d4\u05d5\u05d3\u05d9\u05dd. \u05d1-26 \u05d1\u05d0\u05d5\u05d2\u05d5\u05e1\u05d8 1789 \u05d4\u05d2\u05d9\u05e9\u05d5 \u05e2\u05e6\u05d5\u05de\u05d4 \u05dc\u05d0\u05e1\u05d9\u05e4\u05d4 \u05d4\u05de\u05db\u05d5\u05e0\u05e0\u05ea \u05d5\u05d1\u05d9\u05e7\u05e9\u05d5 \u05d6\u05db\u05d5\u05d9\u05d5\u05ea-\u05d0\u05d6\u05e8\u05d7; \u05d1-28 \u05d1\u05d9\u05e0\u05d5\u05d0\u05e8 1790 \u05d4\u05d5\u05e2\u05e0\u05e7\u05d5 \u05d6\u05db\u05d5\u05d9\u05d5\u05ea \u05d0\u05dc\u05d4 \u05dc\"\u05d9\u05d4\u05d5\u05d3\u05d9\u05dd \u05d4\u05e6\u05e8\u05e4\u05ea\u05d9\u05d9\u05dd\" \u05d9\u05d5\u05e6\u05d0\u05d9 \u05e1\u05e4\u05e8\u05d3, \u05e4\u05d5\u05e8\u05d8\u05d5\u05d2\u05d0\u05dc \u05d5\u05d0\u05d5\u05d5\u05d9\u05e0\u05d9\u05d5\u05df.\n\n\u05d1-1809 \u05db\u05d1\u05e8 \u05de\u05e0\u05d4 \u05d4\u05d9\u05d9\u05e9\u05d5\u05d1 \u05d4\u05d9\u05d4\u05d5\u05d3\u05d9 \u05d1\u05e4\u05e8\u05d9\u05e1 \u05d9\u05d5\u05ea\u05e8 \u05de-2,900 \u05d0\u05d9\u05e9 \u05d5\u05db\u05e2\u05d1\u05d5\u05e8 \u05e2\u05e9\u05e8 \u05e9\u05e0\u05d9\u05dd 6,000 - 7,000. \u05d0\u05d6 \u05e0\u05d9\u05d2\u05e9\u05d4 \u05d4\u05e7\u05d5\u05e0\u05e1\u05d9\u05e1\u05d8\u05d5\u05e8\u05d9\u05d4 \u05dc\u05d1\u05e0\u05d9\u05d9\u05ea \u05d1\u05d9\u05ea-\u05d4\u05db\u05e0\u05e1\u05ea \u05d4\u05d2\u05d3\u05d5\u05dc, \u05d5\u05d4\u05e7\u05d9\u05de\u05d4 \u05d0\u05ea \u05d1\u05d9\u05ea-\u05e1\u05e4\u05e8 \u05d4\u05d9\u05e1\u05d5\u05d3\u05d9 \u05d4\u05e8\u05d0\u05e9\u05d5\u05df. \u05d1-1859 \u05d4\u05d5\u05e2\u05ea\u05e7 \u05de\u05de\u05e5 \u05d1\u05d9\u05ea-\u05d4\u05de\u05d3\u05e8\u05e9 \u05dc\u05e8\u05d1\u05e0\u05d9\u05dd \u05d5\u05d1\u05e9\u05e0\u05d4 \u05e9\u05dc\u05d0\u05d7\u05e8\u05d9\u05d4 \u05e0\u05d5\u05e1\u05d3\u05d4 \u05d1\u05e4\u05e8\u05d9\u05e1 \u05d7\u05d1\u05e8\u05ea \"\u05db\u05dc \u05d9\u05e9\u05e8\u05d0\u05dc \u05d7\u05d1\u05e8\u05d9\u05dd\".\n\n\u05d1-1869 \u05e0\u05e8\u05e9\u05de\u05d5 \u05d1\u05e4\u05e8\u05d9\u05e1 \u05db-30,000 \u05ea\u05d5\u05e9\u05d1\u05d9\u05dd \u05d9\u05d4\u05d5\u05d3\u05d9\u05d9\u05dd (\u05db-%40 \u05de\u05db\u05dc\u05dc \u05d4\u05d9\u05d9\u05e9\u05d5\u05d1 \u05d4\u05d9\u05d4\u05d5\u05d3\u05d9 \u05d1\u05e6\u05e8\u05e4\u05ea), \u05e8\u05d5\u05d1\u05dd \u05d9\u05d5\u05e6\u05d0\u05d9 \u05d0\u05dc\u05d6\u05d0\u05e1, \u05dc\u05d5\u05e8\u05d9\u05d9\u05df \u05d5\u05d2\u05e8\u05de\u05e0\u05d9\u05d4, \u05d5\u05db\u05de\u05d4 \u05de\u05d0\u05d5\u05ea \u05d9\u05d5\u05e6\u05d0\u05d9 \u05e4\u05d5\u05dc\u05d9\u05df. \u05de\u05e2\u05d8\u05d9\u05dd \u05de\u05d0\u05d3 \u05d4\u05d9\u05d5 \u05e2\u05ea\u05d9\u05e8\u05d9-\u05d4\u05d5\u05df; \u05d4\u05e8\u05d5\u05d1 \u05d4\u05de\u05db\u05e8\u05d9\u05e2 \u05d4\u05e9\u05ea\u05d9\u05d9\u05da \u05dc\u05de\u05e2\u05de\u05d3 \u05d4\u05d1\u05d9\u05e0\u05d5\u05e0\u05d9 \u05d4\u05e0\u05de\u05d5\u05da. \u05d1\u05e7\u05e8\u05d1 \u05d4\u05e0\u05d5\u05e2\u05e8 \u05d4\u05d9\u05d4\u05d5\u05d3\u05d9 \u05d8\u05d9\u05e4\u05d7\u05d5 \u05d0\u05ea \u05d0\u05d4\u05d1\u05ea \u05d4\u05e2\u05d1\u05d5\u05d3\u05d4, \u05d5\u05d7\u05dc\u05d4 \u05d2\u05dd \u05e2\u05dc\u05d9\u05d9\u05d4 \u05de\u05ea\u05de\u05d3\u05ea \u05d1\u05de\u05e1\u05e4\u05e8 \u05d4\u05d9\u05d4\u05d5\u05d3\u05d9\u05dd \u05d1\u05e2\u05dc\u05d9 \u05de\u05e7\u05e6\u05d5\u05e2\u05d5\u05ea \u05d7\u05d5\u05e4\u05e9\u05d9\u05d9\u05dd - \u05de\u05d5\u05e8\u05d9\u05dd \u05d1\u05d0\u05e7\u05d3\u05de\u05d9\u05d4, \u05e2\u05d5\u05e8\u05db\u05d9-\u05d3\u05d9\u05df \u05d5\u05e8\u05d5\u05e4\u05d0\u05d9\u05dd.\n\n\u05d1\u05ea\u05d7\u05d9\u05dc\u05ea \u05e9\u05e0\u05d5\u05ea \u05d4-80 \u05e9\u05dc \u05d4\u05de\u05d0\u05d4 \u05d4- 19 \u05d4\u05d2\u05d9\u05e2\u05d5 \u05dc\u05e4\u05e8\u05d9\u05e1 \u05e4\u05dc\u05d9\u05d8\u05d9\u05dd \u05de\u05e8\u05d5\u05e1\u05d9\u05d4 \u05d5\u05de\u05df \u05d4\u05d0\u05d6\u05d5\u05e8\u05d9\u05dd \u05d4\u05e1\u05dc\u05d0\u05d1\u05d9\u05d9\u05dd \u05e9\u05dc \u05d0\u05d5\u05e1\u05d8\u05e8\u05d9\u05d4 \u05d5\u05e8\u05d5\u05de\u05e0\u05d9\u05d4, \u05d5\u05d7\u05dc \u05d2\u05d9\u05d3\u05d5\u05dc \u05e0\u05d9\u05db\u05e8 \u05d1\u05e7\u05e8\u05d1 \u05e2\u05d5\u05d1\u05d3\u05d9-\u05db\u05e4\u05d9\u05d9\u05dd \u05d9\u05d4\u05d5\u05d3\u05d9\u05dd \u05d1\u05e2\u05d9\u05e8. \u05e2\u05dd \u05d6\u05d0\u05ea \u05d2\u05d1\u05e8\u05d4 \u05d2\u05dd \u05d4\u05d4\u05e1\u05ea\u05d4 \u05d4\u05d0\u05e0\u05d8\u05d9\u05e9\u05de\u05d9\u05ea, \u05e9\u05d4\u05d2\u05d9\u05e2\u05d4 \u05dc\u05e9\u05d9\u05d0\u05d4 \u05d1\u05e4\u05e8\u05e9\u05ea \u05d3\u05e8\u05d9\u05d9\u05e4\u05d5\u05e1 (\u05de\u05e9\u05e0\u05ea 1894).\n\n\u05e2\u05dd \u05d4\u05e4\u05e8\u05d3\u05ea \u05d4\u05d3\u05ea \u05de\u05df \u05d4\u05de\u05d3\u05d9\u05e0\u05d4 \u05d1-1905 \u05e0\u05e2\u05e9\u05ea\u05d4 \u05d4\u05e7\u05d5\u05e0\u05e1\u05d9\u05e1\u05d8\u05d5\u05e8\u05d9\u05d4 \u05d4\u05d9\u05d4\u05d5\u05d3\u05d9\u05ea \u05d1\u05e4\u05e8\u05d9\u05e1 \u05d0\u05e8\u05d2\u05d5\u05df \u05d3\u05ea\u05d9 \u05e4\u05e8\u05d8\u05d9; \u05d5\u05e2\u05d3\u05d9\u05d9\u05df \u05d4\u05d9\u05d9\u05ea\u05d4 \u05d1\u05e9\u05dc\u05d9\u05d8\u05ea \u05d9\u05d5\u05e6\u05d0\u05d9 \u05d0\u05dc\u05d6\u05d0\u05e1 \u05d5\u05dc\u05d5\u05e8\u05d9\u05d9\u05df, \u05de\u05d9\u05e2\u05d5\u05d8 \u05d1\u05d9\u05df \u05d9\u05d4\u05d5\u05d3\u05d9 \u05e4\u05e8\u05d9\u05e1, \u05d5\u05d4\u05de\u05d5\u05e0\u05d9 \u05d4\u05de\u05d4\u05d2\u05e8\u05d9\u05dd \u05d4\u05d7\u05d3\u05e9\u05d9\u05dd \u05d4\u05e1\u05ea\u05d9\u05d9\u05d2\u05d5 \u05de\u05de\u05e0\u05d4. \u05de\u05d1\u05d9\u05df \u05d4\u05de\u05d4\u05d2\u05e8\u05d9\u05dd \u05d4\u05d7\u05d3\u05e9\u05d9\u05dd \u05d9\u05e6\u05d0\u05d5 13,000 \"\u05d4\u05d9\u05d4\u05d5\u05d3\u05d9\u05dd \u05d4\u05d6\u05e8\u05d9\u05dd\" \u05e9\u05e9\u05d9\u05e8\u05ea\u05d5 \u05d1\u05e9\u05d5\u05e8\u05d5\u05ea \u05d4\u05e6\u05d1\u05d0 \u05d4\u05e6\u05e8\u05e4\u05ea\u05d9 \u05d1\u05de\u05dc\u05d7\u05de\u05ea-\u05d4\u05e2\u05d5\u05dc\u05dd \u05d4\u05e8\u05d0\u05e9\u05d5\u05e0\u05d4 (1914 - 1918).\n\n\u05d0\u05d7\u05e8\u05d9 \u05d4\u05de\u05dc\u05d7\u05de\u05d4 \u05d4\u05ea\u05d7\u05d9\u05dc\u05d4 \u05d4\u05d2\u05d9\u05e8\u05d4 \u05d9\u05d4\u05d5\u05d3\u05d9\u05ea \u05dc\u05e4\u05e8\u05d9\u05e1 \u05de\u05e6\u05e4\u05d5\u05df-\u05d0\u05e4\u05e8\u05d9\u05e7\u05d4, \u05de\u05d8\u05d5\u05e8\u05e7\u05d9\u05d4, \u05de\u05d0\u05e8\u05e6\u05d5\u05ea \u05d4\u05d1\u05dc\u05e7\u05df \u05d5\u05d1\u05e2\u05d9\u05e7\u05e8 \u05de\u05de\u05d6\u05e8\u05d7-\u05d0\u05d9\u05e8\u05d5\u05e4\u05d4.\n\n\u05d1\u05e9\u05e0\u05ea 1939 \u05d9\u05e9\u05d1\u05d5 \u05d1\u05e4\u05e8\u05d9\u05e1 150,000 \u05d9\u05d4\u05d5\u05d3\u05d9\u05dd, \u05e8\u05d5\u05d1\u05dd \u05d4\u05d9\u05d5 \u05d3\u05d5\u05d1\u05e8\u05d9 \u05d9\u05d9\u05d3\u05d9\u05e9, \u05d5\u05d4\u05d9\u05d5 \u05d9\u05d5\u05ea\u05e8 \u05de\u05de\u05d7\u05e6\u05d9\u05ea \u05d4\u05d9\u05d9\u05e9\u05d5\u05d1 \u05d4\u05d9\u05d4\u05d5\u05d3\u05d9 \u05d1\u05e6\u05e8\u05e4\u05ea \u05db\u05d5\u05dc\u05d4. \u05e8\u05d9\u05db\u05d5\u05d6\u05d9\u05dd \u05d9\u05d4\u05d5\u05d3\u05d9\u05d9\u05dd \u05d4\u05d9\u05d5 \u05d1\u05d0\u05d6\u05d5\u05e8\u05d9\u05dd \u05d4\u05e6\u05e4\u05d5\u05e0\u05d9\u05d9\u05dd \u05d5\u05d4\u05de\u05d6\u05e8\u05d7\u05d9\u05d9\u05dd \u05e9\u05dc \u05d4\u05e2\u05d9\u05e8. \u05d4\u05d9\u05d4\u05d5\u05d3\u05d9\u05dd \u05d4\u05d9\u05d5 \u05de\u05d0\u05d5\u05e8\u05d2\u05e0\u05d9\u05dd \u05d1\u05d9\u05d5\u05ea\u05e8 \u05de-150 \"\u05dc\u05d0\u05e0\u05d3\u05e1\u05de\u05d0\u05e0\u05e9\u05d0\u05e4\u05d8\" (\u05d0\u05e8\u05d2\u05d5\u05e0\u05d9\u05dd \u05e9\u05dc \u05d9\u05d5\u05e6\u05d0\u05d9 \u05e7\u05d4\u05d9\u05dc\u05d5\u05ea \u05e9\u05d5\u05e0\u05d5\u05ea) \u05d5\u05d1\u05d0\u05d2\u05d5\u05d3\u05d5\u05ea \u05de\u05d0\u05d2\u05d5\u05d3\u05d5\u05ea \u05e9\u05d5\u05e0\u05d5\u05ea, \u05d5\u05d0\u05d9\u05dc\u05d5 \u05d4\u05e7\u05d5\u05e0\u05e1\u05d9\u05e1\u05d8\u05d5\u05e8\u05d9\u05d4 \u05e9\u05dc \u05e4\u05e8\u05d9\u05e1 \u05de\u05e0\u05ea\u05d4 \u05e8\u05e7 6,000 \u05d7\u05d1\u05e8\u05d9\u05dd \u05e8\u05e9\u05d5\u05de\u05d9\u05dd. \u05de\u05d1\u05ea\u05d9-\u05d4\u05e1\u05e4\u05e8 \u05d4\u05d9\u05d4\u05d5\u05d3\u05d9\u05d9\u05dd \u05d4\u05d9\u05e9\u05e0\u05d9\u05dd \u05e9\u05e8\u05d3 \u05e8\u05e7 \u05d0\u05d7\u05d3, \u05d0\u05d1\u05dc \u05dc\u05e6\u05d9\u05d3\u05d5 \u05d4\u05ea\u05e7\u05d9\u05d9\u05de\u05d4 \u05e8\u05e9\u05ea \u05d7\u05d9\u05e0\u05d5\u05da \u05d3\u05ea\u05d9 \u05d1\u05d1\u05ea\u05d9-\u05d4\u05db\u05e0\u05e1\u05ea \u05d5\u05d1\"\u05de\u05e0\u05d9\u05d9\u05e0\u05d9\u05dd\", \u05d1\u05d9\u05ea-\u05e1\u05e4\u05e8 \u05ea\u05d9\u05db\u05d5\u05df \u05e4\u05e8\u05d8\u05d9 \u05d5\u05d0\u05e4\u05d9\u05dc\u05d5 \u05db\u05de\u05d4 \u05ea\u05d9\u05db\u05d5\u05e0\u05d9\u05dd \u05de\u05de\u05e9\u05dc\u05ea\u05d9\u05d9\u05dd. \u05dc\u05e2\u05d9\u05ea\u05d5\u05e0\u05d5\u05ea \u05d4\u05d9\u05d4\u05d5\u05d3\u05d9\u05ea \u05d1\u05e6\u05e8\u05e4\u05ea\u05d9\u05ea \u05e0\u05d5\u05e1\u05e4\u05d4 \u05e2\u05ea\u05d5\u05e0\u05d5\u05ea \u05d2\u05dd \u05d1\u05d9\u05d9\u05d3\u05d9\u05e9.\n\n\u05d1\u05d9\u05df \u05d4\u05d0\u05d9\u05e9\u05d9\u05dd \u05d4\u05de\u05d5\u05d1\u05d9\u05dc\u05d9\u05dd \u05d1\u05e7\u05d4\u05d9\u05dc\u05ea \u05d9\u05d4\u05d5\u05d3\u05d9 \u05e4\u05e8\u05d9\u05e1 \u05d4\u05d9\u05d5 \u05d7\u05ea\u05e0\u05d9 \u05e4\u05e8\u05e1 \u05e0\u05d5\u05d1\u05dc \u05e8\u05e0\u05d4 \u05e7\u05d0\u05e1\u05df \u05d5\u05d0' \u05dc\u05d1\u05d5\u05d1. \u05d1\u05d0\u05de\u05e0\u05d5\u05ea \u05d4\u05e6\u05d9\u05d5\u05e8 \u05d5\u05d4\u05e4\u05d9\u05e1\u05d5\u05dc \u05ea\u05e4\u05e1\u05d5 \u05d9\u05d4\u05d5\u05d3\u05d9\u05dd \u05de\u05e7\u05d5\u05dd \u05d1\u05d5\u05dc\u05d8, \u05d1\u05de\u05d9\u05d5\u05d7\u05d3 \u05d1\u05d0\u05e1\u05db\u05d5\u05dc\u05d4 \u05d4\u05e4\u05e8\u05d9\u05e1\u05d0\u05d9\u05ea \u05d1\u05d9\u05df \u05e9\u05ea\u05d9 \u05de\u05dc\u05d7\u05de\u05d5\u05ea- \u05d4\u05e2\u05d5\u05dc\u05dd.\n\n\u05e2\u05e8\u05d1 \u05de\u05dc\u05d7\u05de\u05ea \u05d4\u05e2\u05d5\u05dc\u05dd \u05d4\u05e9\u05e0\u05d9\u05d9\u05d4 (\u05e1\u05e4\u05d8\u05de\u05d1\u05e8 1939) \u05d9\u05e9\u05d1\u05d5 \u05d1\u05e4\u05e8\u05d9\u05e1 \u05dc\u05de\u05e2\u05dc\u05d4 \u05de- 150,000 \u05d9\u05d4\u05d5\u05d3\u05d9\u05dd.\n\n\n\u05ea\u05e7\u05d5\u05e4\u05ea \u05d4\u05e9\u05d5\u05d0\u05d4\n\n\u05d1-14 \u05d1\u05d9\u05d5\u05e0\u05d9 1940 \u05e0\u05db\u05e0\u05e1 \u05d4\u05e6\u05d1\u05d0 \u05d4\u05d2\u05e8\u05de\u05e0\u05d9 \u05dc\u05e4\u05e8\u05d9\u05e1. \u05e8\u05d1\u05d9\u05dd \u05de\u05ea\u05d5\u05e9\u05d1\u05d9 \u05d4\u05e2\u05d9\u05e8 \u05e0\u05de\u05dc\u05d8\u05d5, \u05d0\u05d1\u05dc \u05d7\u05d6\u05e8\u05d5 \u05ea\u05d5\u05da \u05e9\u05d1\u05d5\u05e2\u05d5\u05ea \u05d0\u05d7\u05d3\u05d9\u05dd. \u05d1\u05d9\u05df \u05d4\u05d9\u05d4\u05d5\u05d3\u05d9\u05dd \u05d4\u05d9\u05d5 \u05e8\u05d1\u05d9\u05dd \u05e9\u05d4\u05e2\u05d3\u05d9\u05e4\u05d5 \u05dc\u05d4\u05e9\u05d0\u05e8 \u05d1\u05e6\u05e8\u05e4\u05ea \u05d4\u05d1\u05dc\u05ea\u05d9-\u05db\u05d1\u05d5\u05e9\u05d4, \u05d4\u05d9\u05d5 \u05e9\u05d4\u05e8\u05d7\u05d9\u05e7\u05d5 \u05dc\u05d0\u05e8\u05e6\u05d5\u05ea-\u05d4\u05d1\u05e8\u05d9\u05ea (\u05d3\u05d5\u05d2\u05de\u05ea \u05d4\u05e1\u05d5\u05e4\u05e8 \u05d0\u05e0\u05d3\u05e8\u05d9\u05d9 \u05de\u05d5\u05e8\u05d5\u05d0\u05d4) \u05d5\u05d4\u05d9\u05d5 (\u05dc\u05de\u05e9\u05dc, \u05e8\u05e0\u05d4 \u05e7\u05d0\u05e1\u05df \u05d5\u05d2\u05d0\u05e1\u05d8\u05d5\u05df \u05e4\u05d0\u05dc\u05d1\u05e1\u05e7\u05d9) \u05e9\u05d4\u05e6\u05d8\u05e8\u05e4\u05d5 \u05dc\u05ea\u05e0\u05d5\u05e2\u05ea \u05e6\u05e8\u05e4\u05ea \u05d4\u05d7\u05d5\u05e4\u05e9\u05d9\u05ea \u05e9\u05dc \u05d3\u05d4 \u05d2\u05d5\u05dc \u05d1\u05dc\u05d5\u05e0\u05d3\u05d5\u05df.\n\n\u05d9\u05d4\u05d5\u05d3\u05d9 \u05e4\u05d0\u05e8\u05d9\u05e1 \u05d4\u05d9\u05d5 \u05de\u05e8\u05d0\u05e9\u05d5\u05e0\u05d9 \u05d4\u05e4\u05e2\u05d9\u05dc\u05d9\u05dd \u05d1\u05ea\u05e0\u05d5\u05e2\u05d5\u05ea \u05d4\u05de\u05d7\u05ea\u05e8\u05ea; \u05e4\u05e8\u05d0\u05e0\u05e1\u05d9\u05e1 \u05db\u05d4\u05df, \u05e1\u05d5\u05d6\u05d0\u05df \u05d3\u05d2'\u05d9\u05d0\u05df \u05d5\u05d1\u05e8\u05e0\u05e8\u05d3 \u05e7\u05d9\u05e8\u05e9\u05df \u05d4\u05d9\u05d5 \u05de\u05de\u05d0\u05e8\u05d2\u05e0\u05d9 \u05de\u05e6\u05e2\u05d3 \u05d4\u05e1\u05d8\u05d5\u05d3\u05e0\u05d8\u05d9\u05dd \u05d1-11 \u05d1\u05e0\u05d5\u05d1\u05de\u05d1\u05e8 1940, \u05d4\u05e4\u05d2\u05e0\u05ea \u05d4\u05de\u05d7\u05d0\u05d4 \u05d4\u05e8\u05d0\u05e9\u05d5\u05e0\u05d4 \u05e0\u05d2\u05d3 \u05d4\u05d2\u05e8\u05de\u05e0\u05d9\u05dd \u05d1\u05e4\u05e8\u05d9\u05e1.\n\n\u05d1\u05d0\u05de\u05e6\u05e2 \u05de\u05d0\u05d9 1941 \u05d2\u05d5\u05e8\u05e9\u05d5 \u05de\u05e4\u05e8\u05d9\u05e1 \u05e8\u05d0\u05e9\u05d5\u05e0\u05d9 \"\u05d4\u05d9\u05d4\u05d5\u05d3\u05d9\u05dd \u05d4\u05d6\u05e8\u05d9\u05dd\", \u05db- 5,000 \u05d0\u05d9\u05e9, \u05d5\u05e9\u05d5\u05dc\u05d7\u05d5 \u05dc\u05de\u05d7\u05e0\u05d5\u05ea \u05e8\u05d9\u05db\u05d5\u05d6 \u05d5\u05d4\u05e9\u05de\u05d3\u05d4. \u05d1\u05d0\u05d5\u05d2\u05d5\u05e1\u05d8 \u05e9\u05d5\u05dc\u05d7\u05d5 \u05e2\u05d5\u05d3 8,000, \u05d5\u05d1\u05d3\u05e6\u05de\u05d1\u05e8 \u05d2\u05d5\u05e8\u05e9\u05d5 \u05db\u05de\u05d0\u05d4 \u05d0\u05e0\u05e9\u05d9-\u05e8\u05d5\u05d7 \u05d9\u05d4\u05d5\u05d3\u05d9\u05dd. \u05d1-16 \u05d1\u05d9\u05d5\u05dc\u05d9 1942 \u05e0\u05ea\u05e4\u05e1\u05d5 \u05d1\u05e2\u05d9\u05e8, \u05d1\u05e9\u05d9\u05ea\u05d5\u05e3 \u05e4\u05e2\u05d5\u05dc\u05d4 \u05d1\u05d9\u05df \u05d4\u05db\u05d5\u05d1\u05e9\u05d9\u05dd \u05d4\u05d2\u05e8\u05de\u05e0\u05d9\u05dd \u05dc\u05d1\u05d9\u05df \u05d4\u05d6'\u05e0\u05d3\u05e8\u05de\u05e8\u05d9\u05d4 \u05d4\u05e6\u05e8\u05e4\u05ea\u05d9\u05ea, 12,884 \u05d9\u05d4\u05d5\u05d3\u05d9\u05dd (\u05d1\u05d9\u05e0\u05d9\u05d4\u05dd \u05db-4,000 \u05d9\u05dc\u05d3\u05d9\u05dd).\n\n\u05de\u05e6\u05e8\u05e4\u05ea \u05db\u05d5\u05dc\u05d4 \u05d4\u05d5\u05d1\u05dc\u05d5 \u05dc\u05de\u05d7\u05e0\u05d5\u05ea-\u05d4\u05d4\u05e9\u05de\u05d3\u05d4 \u05d1\u05de\u05d6\u05e8\u05d7 85,000 \u05d9\u05d4\u05d5\u05d3\u05d9\u05dd, \u05d9\u05d5\u05ea\u05e8 \u05de\u05de\u05d7\u05e6\u05d9\u05ea\u05dd \u05d4\u05d9\u05d5 \u05ea\u05d5\u05e9\u05d1\u05d9 \u05e4\u05e8\u05d9\u05e1. \u05d1\u05dc\u05d9\u05dc 3 \u05d1\u05d0\u05d5\u05e7\u05d8\u05d5\u05d1\u05e8 1941 \u05d4\u05d5\u05ea\u05e7\u05e4\u05d5 \u05e9\u05d1\u05e2\u05d4 \u05d1\u05ea\u05d9-\u05db\u05e0\u05e1\u05ea \u05d1\u05e2\u05d9\u05e8 \u05d1\u05d9\u05d3\u05d9 \u05e4\u05d0\u05e9\u05d9\u05e1\u05d8\u05d9\u05dd \u05e6\u05e8\u05e4\u05ea\u05d9\u05d9\u05dd \u05d1\u05d7\u05d5\u05de\u05e8\u05d9-\u05e0\u05e4\u05e5 \u05e9\u05e7\u05d9\u05d1\u05dc\u05d5 \u05de\u05de\u05e9\u05d8\u05e8\u05ea \u05d4\u05d1\u05d8\u05d7\u05d5\u05df \u05d4\u05d2\u05e8\u05de\u05e0\u05d9\u05ea.\n\n\u05d1\u05e2\u05ea \u05d4\u05d4\u05ea\u05e7\u05d5\u05de\u05de\u05d5\u05ea \u05d1\u05e4\u05e8\u05d9\u05e1 \u05d1\u05d0\u05d5\u05d2\u05d5\u05e1\u05d8 1944 \u05e0\u05e4\u05dc\u05d5 \u05e2\u05e9\u05e8\u05d5\u05ea \u05d9\u05d4\u05d5\u05d3\u05d9\u05dd \u05d1\u05e7\u05e8\u05d1\u05d5\u05ea. \u05e8\u05d7\u05d5\u05d1\u05d5\u05ea \u05e8\u05d1\u05d9\u05dd \u05d1\u05e2\u05d9\u05e8 \u05d5\u05d1\u05e4\u05e8\u05d1\u05e8\u05d9\u05d4 \u05e0\u05e7\u05e8\u05d0\u05d9\u05dd \u05e2\u05dc \u05e9\u05de\u05d5\u05ea \u05d2\u05d9\u05d1\u05d5\u05e8\u05d9 \u05d4\u05de\u05d7\u05ea\u05e8\u05ea, \u05d5\u05d1-1956 \u05d4\u05d5\u05e7\u05de\u05d4 \u05d1\u05dc\u05d1 \u05e4\u05e8\u05d9\u05e1 \u05d9\u05d3-\u05d6\u05db\u05e8\u05d5\u05df \u05dc\u05d7\u05dc\u05dc\u05d9 \u05d4\u05e9\u05d5\u05d0\u05d4, \u05d1\u05de\u05e1\u05d2\u05e8\u05ea \u05d4\u05de\u05e8\u05db\u05d6 \u05dc\u05ea\u05d9\u05e2\u05d5\u05d3 \u05d9\u05d4\u05d5\u05d3\u05d9 \u05d6\u05de\u05e0\u05e0\u05d5.\n\n\n\u05e2\u05dc \u05e4\u05d9 \u05de\u05e4\u05e7\u05d3 1968 \u05de\u05e0\u05ea\u05d4 \u05d0\u05d5\u05db\u05dc\u05d5\u05e1\u05d9\u05d9\u05ea \u05e4\u05e8\u05d9\u05e1 2,590,770; \u05d5\u05d1\u05d0\u05d5\u05ea\u05d4 \u05d4\u05e9\u05e0\u05d4 \u05e0\u05d0\u05de\u05d3 \u05de\u05e1\u05e4\u05e8 \u05ea\u05d5\u05e9\u05d1\u05d9\u05d4 \u05d4\u05d9\u05d4\u05d5\u05d3\u05d9\u05dd \u05d1-350,000-300,000 - \u05db%60 \u05de\u05db\u05dc\u05dc \u05d4\u05d9\u05d9\u05e9\u05d5\u05d1 \u05d4\u05d9\u05d4\u05d5\u05d3\u05d9 \u05d1\u05e6\u05e8\u05e4\u05ea. \u05e2\u05dc\u05d9\u05d9\u05ea\u05dd \u05d4\u05db\u05dc\u05db\u05dc\u05d9\u05ea \u05d5\u05d4\u05d7\u05d1\u05e8\u05ea\u05d9\u05ea \u05e9\u05dc \u05d1\u05e0\u05d9 \u05d4\u05d3\u05d5\u05e8 \u05d4\u05e9\u05e0\u05d9 \u05e9\u05dc \u05d4\u05de\u05d4\u05d2\u05e8\u05d9\u05dd \u05d4\u05d9\u05d4\u05d5\u05d3\u05d9\u05dd \u05de\u05de\u05d6\u05e8\u05d7-\u05d0\u05d9\u05e8\u05d5\u05e4\u05d4, \u05e0\u05d4\u05d9\u05e8\u05ea \u05d9\u05d4\u05d5\u05d3\u05d9\u05dd \u05de\u05e6\u05e4\u05d5\u05df- \u05d0\u05e4\u05e8\u05d9\u05e7\u05d4 \u05d5\u05d4\u05e7\u05de\u05ea \u05de\u05e4\u05e2\u05dc\u05d9 \u05d1\u05d9\u05e0\u05d5\u05d9 \u05d7\u05d3\u05e9\u05d9\u05dd; \u05db\u05dc \u05d0\u05dc\u05d4 \u05d2\u05e8\u05de\u05d5 \u05dc\u05e4\u05d9\u05d6\u05d5\u05e8 \u05d4\u05d0\u05d5\u05db\u05dc\u05d5\u05e1\u05d9\u05d9\u05d4 \u05d4\u05d9\u05d4\u05d5\u05d3\u05d9\u05ea \u05d1\u05d1\u05d9\u05e8\u05d4 \u05de\u05e4\u05e8\u05d1\u05e8\u05d9\u05d4 \u05d4\u05de\u05d6\u05e8\u05d7\u05d9\u05d9\u05dd \u05dc\u05d0\u05d6\u05d5\u05e8\u05d9\u05dd \u05d0\u05d7\u05e8\u05d9\u05dd \u05d1\u05e2\u05d9\u05e8. \u05d4\u05de\u05e8\u05db\u05d6\u05d9\u05dd \u05d4\u05d9\u05e9\u05e0\u05d9\u05dd \u05d4\u05ea\u05de\u05dc\u05d0\u05d5 \u05d1\u05d9\u05d4\u05d5\u05d3\u05d9\u05dd \u05e6\u05e4\u05d5\u05df-\u05d0\u05e4\u05e8\u05d9\u05e7\u05e0\u05d9\u05dd \u05d3\u05dc\u05d9-\u05d0\u05de\u05e6\u05e2\u05d9\u05dd, \u05d5\u05d1\u05e9\u05e0\u05d9\u05dd 1966-1957 \u05d2\u05d3\u05dc \u05de\u05e1\u05e4\u05e8 \u05d4\u05e2\u05d3\u05d5\u05ea \u05d4\u05d9\u05d4\u05d5\u05d3\u05d9\u05d5\u05ea \u05d1\u05d0\u05d9\u05d6\u05d5\u05e8 \u05e4\u05e8\u05d9\u05e1 \u05de-44 \u05dc-148.\n\n\u05e2\u05dc \u05d7\u05d9\u05d9 \u05d4\u05d3\u05ea \u05d1\u05e7\u05d4\u05d9\u05dc\u05d4 \u05de\u05de\u05d5\u05e0\u05d4 \u05e8\u05e9\u05de\u05d9\u05ea \u05d4\u05e7\u05d5\u05e0\u05e1\u05d9\u05e1\u05d8\u05d5\u05e8\u05d9\u05d4 \u05e9\u05dc \u05e4\u05e8\u05d9\u05e1, \u05d1\u05e0\u05e9\u05d9\u05d0\u05d5\u05ea\u05d5 \u05d4\u05de\u05e1\u05d5\u05e8\u05ea\u05d9\u05ea \u05e9\u05dc \u05d0\u05d7\u05d3 \u05d4\u05e8\u05d5\u05d8\u05e9\u05d9\u05dc\u05d3\u05d9\u05dd. \u05d4\u05e7\u05d5\u05e0\u05e1\u05d9\u05e1\u05d8\u05d5\u05e8\u05d9\u05d4 \u05d0\u05d9\u05d2\u05d3\u05d4 \u05db-20 \u05d1\u05ea\u05d9-\u05db\u05e0\u05e1\u05ea \u05d5\"\u05de\u05e0\u05d9\u05d9\u05e0\u05d9\u05dd\", \u05d0\u05e9\u05db\u05e0\u05d6\u05d9\u05d9\u05dd \u05d5\u05e1\u05e4\u05e8\u05d3\u05d9\u05d9\u05dd. \u05de\u05dc\u05d1\u05d3 \u05d0\u05dc\u05d4 \u05d4\u05d9\u05d5 \u05db-30 \u05d1\u05ea\u05d9-\u05db\u05e0\u05e1\u05ea \u05e9\u05dc \u05d7\u05e8\u05d3\u05d9\u05dd, \u05e8\u05e4\u05d5\u05e8\u05de\u05d9\u05d9\u05dd \u05d5\u05e7\u05d1\u05d5\u05e6\u05d5\u05ea \u05e2\u05e6\u05de\u05d0\u05d9\u05d5\u05ea, \u05d0\u05d5\u05dc\u05dd \u05e8\u05e7 \u05db\u05e9\u05dc\u05d9\u05e9 \u05de\u05d9\u05d4\u05d5\u05d3\u05d9 \u05e4\u05e8\u05d9\u05e1 \u05e7\u05d9\u05d9\u05de\u05d5 \u05e7\u05e9\u05e8 \u05e2\u05dd \u05de\u05d5\u05e1\u05d3\u05d5\u05ea \u05d4\u05e7\u05d4\u05d9\u05dc\u05d4 \u05dc\u05de\u05d9\u05e0\u05d9\u05d4\u05dd.\n\n\u05d9\u05d5\u05ea\u05e8 \u05de\u05de\u05d0\u05d4 \u05d0\u05dc\u05e3 \u05e4\u05dc\u05d9\u05d8\u05d9\u05dd \u05de\u05e6\u05e4\u05d5\u05df-\u05d0\u05e4\u05e8\u05d9\u05e7\u05d4 \u05e0\u05e2\u05d6\u05e8\u05d5 \u05d1\u05d9\u05d3\u05d9 \u05d0\u05e8\u05d2\u05d5\u05df \u05de\u05d9\u05d5\u05d7\u05d3 \u05d4\u05e4\u05d5\u05e2\u05dc \u05d1\u05e9\u05d9\u05ea\u05d5\u05e3 \u05e2\u05dd \u05d2\u05d5\u05e8\u05de\u05d9\u05dd \u05de\u05de\u05e9\u05dc\u05ea\u05d9\u05d9\u05dd \u05d5\u05de\u05d5\u05e1\u05d3\u05d5\u05ea \u05d7\u05d1\u05e8\u05d4 \u05d5\u05d7\u05d9\u05e0\u05d5\u05da \u05d9\u05d4\u05d5\u05d3\u05d9\u05d9\u05dd. \u05e4\u05e2\u05d5\u05dc\u05d5\u05ea \u05ea\u05e8\u05d1\u05d5\u05ea \u05d5\u05d7\u05d9\u05e0\u05d5\u05da \u05e4\u05e2\u05dc\u05d5 \u05dc\u05d4\u05d2\u05d1\u05e8\u05ea \u05d4\u05ea\u05d5\u05d3\u05e2\u05d4 \u05d4\u05d9\u05d4\u05d5\u05d3\u05d9\u05ea \u05d1\u05e7\u05e8\u05d1 \u05d4\u05e0\u05d5\u05e2\u05e8 \u05d4\u05dc\u05d5\u05de\u05d3; \u05d5\u05e4\u05e8\u05d9\u05e1 \u05d4\u05d9\u05d9\u05ea\u05d4 \u05d0\u05d7\u05ea \u05d4\u05e2\u05e8\u05d9\u05dd \u05d4\u05d9\u05d7\u05d9\u05d3\u05d5\u05ea \u05d1\u05e2\u05d5\u05dc\u05dd \u05e9\u05e7\u05d9\u05d9\u05de\u05d4 \u05d1\u05d9\u05ea-\u05e1\u05e4\u05e8 \u05e2\u05d1\u05e8\u05d9, \u05e9\u05dc\u05d5 \u05ea\u05db\u05e0\u05d9\u05ea \u05dc\u05d9\u05de\u05d5\u05d3\u05d9\u05dd \u05d9\u05e9\u05e8\u05d0\u05dc\u05d9\u05ea \u05dc\u05db\u05dc \u05d3\u05d1\u05e8.\n\n\u05de\u05dc\u05d7\u05de\u05ea \u05e9\u05e9\u05ea \u05d4\u05d9\u05de\u05d9\u05dd \u05d4\u05d5\u05e6\u05d9\u05d0\u05d4 \u05d0\u05dc\u05e4\u05d9 \u05e6\u05e2\u05d9\u05e8\u05d9\u05dd \u05dc\u05d4\u05e4\u05d2\u05e0\u05d5\u05ea \u05d4\u05d6\u05d3\u05d4\u05d5\u05ea \u05e2\u05dd \u05d9\u05e9\u05e8\u05d0\u05dc; \u05d5\u05d2\u05dd \u05d1\"\u05de\u05e8\u05d3 \u05d4\u05e1\u05d8\u05d5\u05d3\u05e0\u05d8\u05d9\u05dd\" (1968) \u05d1\u05dc\u05d8\u05d5 \u05d9\u05d4\u05d5\u05d3\u05d9\u05dd, \u05d5\u05d4\u05d9\u05d5 \u05d7\u05d1\u05e8\u05d9\u05dd \u05d9\u05d4\u05d5\u05d3\u05d9\u05dd \u05d1\u05e7\u05d1\u05d5\u05e6\u05d5\u05ea \u05d4\u05e9\u05de\u05d0\u05dc \u05d4\u05d7\u05d3\u05e9 \u05e9\u05ea\u05de\u05db\u05d5 \u05d1\u05d8\u05e8\u05d5\u05e8 \u05d4\u05e2\u05e8\u05d1\u05d9. \u05d4\u05de\u05ea\u05d9\u05d7\u05d5\u05ea \u05d4\u05d1\u05d9\u05d0\u05d4 \u05dc\u05d7\u05d9\u05db\u05d5\u05db\u05d9\u05dd \u05d1\u05d9\u05df \u05e2\u05e8\u05d1\u05d9\u05dd \u05dc\u05d9\u05d4\u05d5\u05d3\u05d9\u05dd \u05d9\u05d5\u05e6\u05d0\u05d9 \u05e6\u05e4\u05d5\u05df-\u05d0\u05e4\u05e8\u05d9\u05e7\u05d4 \u05d5\u05d4\u05ea\u05d0\u05e8\u05d2\u05e0\u05d5 \u05e7\u05d1\u05d5\u05e6\u05d5\u05ea \u05d9\u05d4\u05d5\u05d3\u05d9\u05d5\u05ea \u05dc\u05d4\u05d2\u05e0\u05d4 \u05e2\u05e6\u05de\u05d9\u05ea.\n\n\u05d1\u05e9\u05e0\u05ea 1997 \u05d7\u05d9\u05d5 \u05d1\u05e6\u05e8\u05e4\u05ea \u05db\u05d5\u05dc\u05d4 \u05db- 600,000 \u05d9\u05d4\u05d5\u05d3\u05d9\u05dd; \u05dc\u05de\u05e2\u05dc\u05d4 \u05de\u05de\u05d7\u05e6\u05d9\u05ea\u05dd (\u05db- 350,000) \u05d9\u05e9\u05d1\u05d5 \u05d1\u05e4\u05e8\u05d9\u05e1 \u05e8\u05d1\u05ea\u05d9. \"\u05d4\u05de\u05d5\u05e2\u05e6\u05d4 \u05e9\u05dc \u05d9\u05d4\u05d5\u05d3\u05d9 \u05e6\u05e8\u05e4\u05ea\"(CRIF) \u05e9\u05d4\u05d5\u05e7\u05de\u05d4 \u05d1\u05e9\u05e0\u05ea 1944 \u05de\u05d9\u05d9\u05e6\u05d2\u05ea \u05d0\u05ea \u05d4\u05e7\u05d4\u05d9\u05dc\u05d5\u05ea \u05d4\u05d9\u05d4\u05d5\u05d3\u05d9\u05d5\u05ea \u05db\u05dc\u05e4\u05d9 \u05d4\u05e9\u05dc\u05d8\u05d5\u05e0\u05d5\u05ea, \u05d5\u05d4\u05e7\u05d5\u05e0\u05e1\u05d9\u05e1\u05d8\u05d5\u05e8\u05d9\u05d4 \u05d0\u05d7\u05e8\u05d0\u05d9\u05ea \u05dc\u05e4\u05e2\u05d9\u05dc\u05d5\u05ea \u05d4\u05d9\u05d4\u05d5\u05d3\u05d9\u05ea \u05d4\u05d3\u05ea\u05d9\u05ea. \u05db\u05dc \u05d4\u05d0\u05e8\u05d2\u05d5\u05e0\u05d9\u05dd \u05d4\u05e6\u05d9\u05d5\u05e0\u05d9\u05d9\u05dd \u05e4\u05d5\u05e2\u05dc\u05d9\u05dd \u05d1\u05e2\u05d9\u05e8 \u05d5\u05db\u05df \u05db\u05e2\u05e9\u05e8\u05d9\u05dd \u05d1\u05ea\u05d9 \u05e1\u05e4\u05e8 \u05d9\u05d4\u05d5\u05d3\u05d9\u05d9\u05dd, \u05e2\u05de\u05de\u05d9\u05d9\u05dd \u05d5\u05ea\u05d9\u05db\u05d5\u05e0\u05d9\u05dd. \u05d5\u05db\u05de\u05e1\u05e4\u05e8 \u05d4\u05d6\u05d4 \u05d1\u05ea\u05d9 \u05db\u05e0\u05e1\u05ea."
    +          },
    +          "UnitText2": {
    +          "En": null,
    +          "He": null
    +          },
    +          "UnitPlaces": [],
    +          "main_image_url": "https://storage.googleapis.com/bhs-flat-pics/5A8D1CC0-3D01-4AB0-B515-4B27873703D8.jpg",
    +          "UnitStatus": 3,
    +          "UnitHeaderDMSoundex": {
    +          "En": "ZZ E794000 ZZ ",
    +          "He": "ZZ H794000 ZZ "
    +          },
    +          "UnitDisplayStatus": 2,
    +          "RightsCode": 1,
    +          "UnitId": 72312,
    +          "IsValueUnit": true,
    +          "StatusDesc": "Completed",
    +          "DisplayStatusDesc": "Museum only",
    +          "PlaceParentTypeCodeDesc": {
    +          "En": "Country"
    +          },
    +          "PlaceParentId": 66873,
    +          "UserLexicon": null,
    +          "Attachments": [],
    +          "Slug": {
    +          "En": "place_paris",
    +          "He": "\u05de\u05e7\u05d5\u05dd_\u05e4\u05e8\u05d9\u05e1"
    +          },
    +          "Header": {
    +          "En": "PARIS",
    +          "He": "\u05e4\u05e8\u05d9\u05e1"
    +          },
    +          "ForPreview": false,
    +          "_id": "571607a576f1023786eada44"
    +      }
    +
  • +
+

Legacy Genealogical Collection

This group contains deprecated APIs which searched the genealogical collection on Mongo.

+

We now search with Elasticsearch, see Persons advanced search.

+

Search for a Person

Search for a Person
GET/v1/person

Deprecated, see an older release for details.

+

Example URI

GET /v1/person
Response  200
HideShow
Headers
Content-Type: application/json

Generated by aglio on 20 Apr 2017

\ No newline at end of file diff --git a/docs/_sources/README.md b/docs/_sources/README.md new file mode 100644 index 0000000..7329527 --- /dev/null +++ b/docs/_sources/README.md @@ -0,0 +1,7 @@ +# documentation source files + +This directory contains the source files used to build the documentation files at the parent docs directory. + +**Important Notice** + +If you just want to read the documentation, go to https://github.com/Beit-Hatfutsot/dbs-back/tree/dev/docs diff --git a/docs/_sources/index.apib b/docs/_sources/index.apib new file mode 100644 index 0000000..8f0f176 --- /dev/null +++ b/docs/_sources/index.apib @@ -0,0 +1,10 @@ +FORMAT: 1A + + +# API for Beit-Hatfutsot Databases +Welcome to the docs for the API server of the museum of the Jewish people. + +Read this if you think the Jewish people haven't suffered enough. + + + diff --git a/docs/_sources/items/item_base.json b/docs/_sources/items/item_base.json new file mode 100644 index 0000000..9290ce0 --- /dev/null +++ b/docs/_sources/items/item_base.json @@ -0,0 +1,13 @@ +{ + // every item gets a unique slug which identifies the item + "Slug": { + "En": "UNIQUE_ITEM_SLUG_IN_ENGLISH", + "He": "UNIQUE_ITEM_SLUG_IN_HEBREW" + }, + // every item has a header title / text, the value depends on the item + // for example - for place, it will be the name of the place, for person - the name of the person etc.. + "Header": { + "En": "ENGLISH_HEADER", + "He": "HEBREW_HEADER" + } +} \ No newline at end of file diff --git a/docs/_sources/items/item_person.json b/docs/_sources/items/item_person.json new file mode 100644 index 0000000..aa41351 --- /dev/null +++ b/docs/_sources/items/item_person.json @@ -0,0 +1,15 @@ +{ + // the BHP item id + "UnitId": 72312, + // person slugs contain the tree number, version and person id (within that tree) + // person slugs are the same for both english and hebrew + "Slug": { + "En": "person_1130%3B0.I3552", + "He": "person_1130%3B0.I3552" + }, + // name of the person - same value is in both english and hebrew + "Header": { + "En": "Moshe Fakeuser", + "He": "Moshe Fakeuser" + } +} \ No newline at end of file diff --git a/docs/_sources/items/item_place.json b/docs/_sources/items/item_place.json new file mode 100644 index 0000000..e91ca29 --- /dev/null +++ b/docs/_sources/items/item_place.json @@ -0,0 +1,23 @@ +{ + "PlaceTypeDesc": { + "En": "City", + "He": "\u05e2\u05d9\u05e8" + }, + // plain text, long article about this place (may contain newlines) + "UnitText1": { + "En": "", + "He": "" + }, + // the BHP item id + "UnitId": 72312, + // slug is comprised of "place_header" + "Slug": { + "En": "place_paris", + "He": "\u05de\u05e7\u05d5\u05dd_\u05e4\u05e8\u05d9\u05e1" + }, + // name of the place + "Header": { + "En": "PARIS", + "He": "\u05e4\u05e8\u05d9\u05e1" + } +} \ No newline at end of file diff --git a/docs/_sources/items/items.md b/docs/_sources/items/items.md new file mode 100644 index 0000000..4e17c06 --- /dev/null +++ b/docs/_sources/items/items.md @@ -0,0 +1,45 @@ +# Group Item + +## Get Item/s [GET /v1/item/{slugs}] +Get specific items according to their slugs + ++ Parameters + + slugs: `place_paris,person_1130;0.I3552` (string, required) + Comma-separated list of slugs to fetch + ++ Response 200 (application/json) + + [ + // list of item objects (see Item Models section for details) + , + + ] + + +# Group Item Models +Every item represents an item in one of our collections. + +Each item have some common properties and some unique properties depending on the collection. + +## Item +The base item, includes attributes common to all collections. + ++ Model (application/json) + + + + +## Place +Extends the base item with place specific attributes + ++ Model (application/json) + + + + +## Person +Extends the base item with person specific attributes + ++ Model (application/json) + + diff --git a/docs/_sources/search/persons_advanced_search_params.md b/docs/_sources/search/persons_advanced_search_params.md new file mode 100644 index 0000000..19ed3d0 --- /dev/null +++ b/docs/_sources/search/persons_advanced_search_params.md @@ -0,0 +1 @@ +{?collection,q,from_,size,first,first_t,last,last_t,pob,pob_t,pom,pom_t,pod,pod_t,yob,yob_t,yob_v,yom,yom_t,yom_v,yod,yod_t,yod_v,sex,treenum} \ No newline at end of file diff --git a/docs/_sources/search/persons_advanced_search_params_description.md b/docs/_sources/search/persons_advanced_search_params_description.md new file mode 100644 index 0000000..0d430f5 --- /dev/null +++ b/docs/_sources/search/persons_advanced_search_params_description.md @@ -0,0 +1,32 @@ ++ Parameters + + collection: `persons` (enum, required) - The advanced persons search requires collection to be persons + + Members + + persons + + q (string, optional) - same as in [general search](#database-search-general-search), but optional + + from_ (number, optional) - see [general search](#database-search-general-search) + + size (number, optional) - see [general search](#database-search-general-search) + + first (string, optional) - first name + + first_t: `like` (enum, optional) - first name + + last (string, optional) - last name + + last_t: `like` (enum, optional) - last name + + pob (string, optional) - place of birth + + pob_t: `like` (enum, optional) - place of birth + + pom (string, optional) - place of marriage + + pom_t: `like` (enum, optional) - place of marriage + + pod (string, optional) - place of death + + pod_t: `like` (enum, optional) - place of death + + yob (number, optional) - year of birth + + yob_t: `pmyears` (enum, optional) - year of birth + + yob_v: + + yom (number, optional) - year of marriage + + yom_t: `pmyears` (enum, optional) - year of marriage + + yom_v: + + yod (number, optional) - year of death + + yod_t: `pmyears` (enum, optional) - year of death + + yod_v: + + sex (enum, optional) - **F**: Female, **M**: Male, **U**: Unkonwn / Unspecified + + Members + + F + + M + + U + + treenum (number, optional) - Beit Hatfutsot tree number \ No newline at end of file diff --git a/docs/_sources/search/search.md b/docs/_sources/search/search.md new file mode 100644 index 0000000..0bfa9bf --- /dev/null +++ b/docs/_sources/search/search.md @@ -0,0 +1,42 @@ +# Group Database Search + + +## General search [GET /v1/search{?q,collection,from_,size,first,with_persons}] + +This view initiates a full text search on all our collections. + ++ Parameters + + q: `netta` (string) + The search string, using [elasticsearch query string syntax](https://www.elastic.co/guide/en/elasticsearch/reference/2.4/query-dsl-query-string-query.html#query-string-syntax) + + collection (string, optional) + A comma separated list of collections to search in. + + Members + + movies + + places + + personalities + + photoUnits + + familyNames + + persons + + from_ (number, optional) + Which search result to start from. + + size (number, optional) + How many results to return. + + with_persons (enum, optional) + If to include persons results when searching over multiple collections + + Members + + 1 + ++ Response 200 (application/json) + + + + +## Persons advanced search [GET /v1/search] + +Advanced search on persons, must have at last one of either q param (as in general search) or the person specific search params + + + ++ Response 200 (application/json) + + \ No newline at end of file diff --git a/docs/_sources/search/search_results.json b/docs/_sources/search/search_results.json new file mode 100644 index 0000000..a215d4c --- /dev/null +++ b/docs/_sources/search/search_results.json @@ -0,0 +1,9 @@ +{ + "hits": { + "hits": [ + // list of item objects, depending on the searched collections + // see Items section for details about the structure of item objects + ], + "total": 1 // total number of results + } +} \ No newline at end of file diff --git a/docs/_sources/search/text_search_type_members.md b/docs/_sources/search/text_search_type_members.md new file mode 100644 index 0000000..5483720 --- /dev/null +++ b/docs/_sources/search/text_search_type_members.md @@ -0,0 +1,5 @@ +search type + + Members + + exact + + like + + starts \ No newline at end of file diff --git a/docs/_sources/search/year_search_type_members.md b/docs/_sources/search/year_search_type_members.md new file mode 100644 index 0000000..4e35c0d --- /dev/null +++ b/docs/_sources/search/year_search_type_members.md @@ -0,0 +1,4 @@ +search type + + Members + + exact + + pmyears \ No newline at end of file diff --git a/docs/_sources/search/year_search_v_param.md b/docs/_sources/search/year_search_v_param.md new file mode 100644 index 0000000..06bd78d --- /dev/null +++ b/docs/_sources/search/year_search_v_param.md @@ -0,0 +1 @@ +`2` (number, optional) - if the corresponding search type is pmyears, this is the value to add / subtract \ No newline at end of file diff --git a/docs/index.apib b/docs/index.apib deleted file mode 100644 index 2a6a2e1..0000000 --- a/docs/index.apib +++ /dev/null @@ -1,478 +0,0 @@ -FORMAT: 1A - -# API for Beit-Hatfutsot Databases - -## Group Genealogical Collection - -### Search for a Person [GET /v1/person{?place,first_name,maiden_name,last_name,birth_place,marriage_place,death_place,birth_year,marriage_year,death_year,sex,tree_number}] - -This view initiates persons search in Beit HaTfutsot genealogical data. - -+ Parameters - + place (string, optional) - A place that the person been born, married or died in - + first_name: `Albert` (string, optional) - Supports two suffixes - `;prefix` to look for names - begining with the given string and `;phonetic` to use phonetic matching. - + maiden_name (string, optional) - Supports two suffixes - `;prefix` to look for names - begining with the given string and `;phonetic` to use phonetic matching. - + last_name: `Einstein` (string, optional) - Supports two suffixes - `;prefix` to look for names - begining with the given string and `;phonetic` to use phonetic matching. - + birth_place (string, optional) - Supports two suffixes - `;prefix` to look for names - begining with the given string and `;phonetic` to use phonetic matching. - + marriage_place (string, optional) - Supports two suffixes - `;prefix` to look for names - begining with the given string and `;phonetic` to use phonetic matching. - + death_place (string, optional) - Supports two suffixes - `;prefix` to look for names - begining with the given string and `;phonetic` to use phonetic matching. - + birth_year (number, optional) - Supports an optional fudge factor suffix, i.e. to search for a person - born between 1905 to 1909 use "1907:2" - + marriage_year (number, optional) - Supports an optional fudge factor suffix. - + death_year (number, optional) - Supports an optional fudge factor suffix. - + tree_number (number, optional) - A valid tree number, like 7806 - + sex (enum[String], optional) - + Members - + 'f' - + 'm' - -+ Response 200 (application/json) - - + Body - - { - "items": [ - { - "Slug": { - "En": "person_1196;0.I686" - }, - "birth_place": "Ulm a.D., Germany", - "birth_year": 1879, - "death_place": "Princeton, U.S.A.", - "death_year": 1955, - "deceased": true, - "id": "I686", - "name": [ - "Albert", - "Einstein" - ], - "parents": [ - { - "deceased": true, - "id": "I684", - "name": [ - "Hermann", - "Einstein" - ], - "parents": [ - { - "deceased": true, - "id": "I682", - "name": [ - "Abraham Ruppert", - "Einstein" - ], - "sex": "M" - }, - { - "deceased": true, - "id": "I683", - "name": [ - "Helena", - "Moos" - ], - "sex": "F" - } - ], - "partners": [ - { - "children": [], - "deceased": true, - "id": "I685", - "name": [ - "Pauline", - "Koch" - ], - "sex": "F" - } - ], - "sex": "M" - }, - { - "deceased": true, - "id": "I685", - "name": [ - "Pauline", - "Koch" - ], - "parents": [], - "partners": [ - { - "children": [], - "deceased": true, - "id": "I684", - "name": [ - "Hermann", - "Einstein" - ], - "sex": "M" - } - ], - "sex": "F" - } - ], - "partners": [ - { - "children": [ - { - "deceased": true, - "id": "I835", - "name": [ - "Lieserl", - "Maric" - ], - "partners": [], - "sex": "F" - }, - { - "deceased": true, - "id": "I836", - "name": [ - "Hans Albert", - "Einstein" - ], - "partners": [ - { - "children": [ - { - "deceased": false, - "id": "I839", - "name": [ - "Bernhard Caesar", - "Einstein" - ], - "sex": "M" - }, - { - "deceased": true, - "id": "I1287", - "name": [ - "Klaus", - "Einstein" - ], - "sex": "M" - }, - { - "deceased": false, - "id": "I1288", - "name": [ - "Evelyn", - "Einstein" - ], - "sex": "F" - } - ], - "deceased": true, - "id": "I838", - "name": [ - "Frieda", - "Knecht" - ], - "sex": "F" - }, - { - "children": [], - "deceased": true, - "id": "I1289", - "name": [ - "Elizabeth", - "Roboz" - ], - "sex": "F" - } - ], - "sex": "M" - }, - { - "deceased": true, - "id": "I837", - "name": [ - "Eduard", - "Einstein" - ], - "partners": [], - "sex": "M" - } - ], - "deceased": true, - "id": "I687", - "name": [ - "Mileva", - "Maric" - ], - "sex": "F" - }, - { - "children": [], - "deceased": true, - "id": "I688", - "name": [ - "Elsa", - "Einstein-Loewenthal" - ], - "sex": "F" - } - ], - "sex": "M", - "siblings": [ - { - "deceased": true, - "id": "I840", - "name": [ - "Maja", - "Einstein" - ], - "sex": "F" - } - ], - "tree_num": 1196, - "tree_version": 0 - }, - ... - ], - "total": 16 - } - -## Group Database Search - -### Search [GET /v1/search{?q}] - -This view initiates a full text search on all our collections except for the -geneological one. - -+ Parameters - + q: `netta` (string) - The search string, using [elasticsearch syntax](https://www.elastic.co/guide/en/elasticsearch/reference/2.4/query-dsl-query-string-query.html#query-string-syntax) - + collection (enum, optional) - A comma separated list of collections to search in. - + Members - + 'movies' - + 'places' - + 'personalities' - + 'photoUnits' - + 'familyNames' - + from_ (number, optional) - Which search result to start from. - + size (number, optional) - How many results to return. - -+ Response 200 (application/json) - - + Body - - { - "hits": { - "hits": [ - { - "_score": 0.2899917, - "_type": "familyNames", - "_id": "83352", - "_source": { - "LocationInMuseum": null, - "Pictures": [], - "PictureUnitsIds": null, - "related": [ - "image_chief-rabbi-abraham-palaggi-1809-1899-izmir-turkey-1896", - "familyname_eisner", - "personality_offenbach-jacques-composer", - "place_vancouver", - "image_rabbi-abraham-palaggi-chief-rabbi-of-izmir-with-members-of-the-jewish-community-izmir-turkey-1896", - "familyname_isaac" - ], - "UpdateDate": "2012-11-30T10:22:00", - "OldUnitId": "FM010344.HTM", - "UpdateUser": "Haim - Family Names (2012)", - "UnitDisplayStatus": 2, - "PrevPicturePaths": null, - "TS": "000000000001950f", - "UnitType": 6, - "UnitTypeDesc": "Family Name", - "EditorRemarks": "hasavot from Family Names", - "thumbnail": { - "path": "", - "data": "" - }, - "RightsDesc": "Full", - "Bibiliography": { - "En": null, - "He": null - }, - "UnitText1": { - "En": "IZAAKS, IZAACS\r\n\r\nSurnames derive from one of many different origins. Sometimes there may be more than one explanation for the same name. This family name is a patronymic surname based on a male ancestor's personal name, in this case of biblical origin. Izaaks, in which the ending \"-s\" stands for \"son of\", is an equivalent of Ben Isaac. The biblical Isaac is derived from the Hebrew biblical male personal name Yitzchak, the second of the patriarchs, son of Abraham and Sarah. His name means \"he will laugh\" (Genesis 21.6). The name of the first German Jew recorded in history is Isaac. Probably a merchant residing in Aachen (Aix-La-Chapelle), he was a member of the embassy sent by Emperor Charlemagne (Carolus Magnus) to the Caliph Harun Al Rashid in 797 CE.\r\n\r\nA widespread personal name, Isaac produced many Jewish family names in several languages, among them the Yiddish Itzig and Hitzig, the French Isacquet and Haquet, the Arabic Ishak, and the English Hitchcock. In the 20th century, Izaaks is recorded as a Jewish family name with Netta Levi Izaaks, who was killed in the German death camp at Auschwitz during World War II.", - "He": "IZAAKS, IZAACS\r\n\r\n\u05e9\u05de\u05d5\u05ea \u05de\u05e9\u05e4\u05d7\u05d4 \u05e0\u05d5\u05d1\u05e2\u05d9\u05dd \u05de\u05db\u05de\u05d4 \u05de\u05e7\u05d5\u05e8\u05d5\u05ea \u05e9\u05d5\u05e0\u05d9\u05dd. \u05dc\u05e2\u05d9\u05ea\u05d9\u05dd \u05dc\u05d0\u05d5\u05ea\u05d5 \u05e9\u05dd \u05e7\u05d9\u05d9\u05dd \u05d9\u05d5\u05ea\u05e8 \u05de\u05d4\u05e1\u05d1\u05e8 \u05d0\u05d7\u05d3. \u05e9\u05dd \u05de\u05e9\u05e4\u05d7\u05d4 \u05d6\u05d4 \u05d4\u05d5\u05d0 \u05de\u05e1\u05d5\u05d2 \u05d4\u05e9\u05de\u05d5\u05ea \u05d4\u05e4\u05d8\u05e8\u05d5\u05e0\u05d9\u05de\u05d9\u05d9\u05dd (\u05e9\u05de\u05d5\u05ea \u05e9\u05de\u05e7\u05d5\u05e8\u05dd \u05d1\u05e9\u05de\u05d5 \u05e9\u05dc \u05d4\u05d0\u05d1) \u05de\u05db\u05d9\u05d5\u05d5\u05df \u05e9\u05d4\u05dd \u05e0\u05d2\u05d6\u05e8\u05d9\u05dd \u05de\u05e9\u05de\u05d5 \u05d4\u05e4\u05e8\u05d8\u05d9 \u05e9\u05dc \u05d0\u05d7\u05d3 \u05de\u05d0\u05d1\u05d5\u05ea \u05d4\u05de\u05e9\u05e4\u05d7\u05d4, \u05db\u05d0\u05e9\u05e8 \u05d1\u05de\u05e7\u05e8\u05d4 \u05d6\u05d4 \u05d4\u05d5\u05d0 \u05de\u05de\u05e7\u05d5\u05e8 \u05de\u05e7\u05e8\u05d0\u05d9. \u05d0\u05d9\u05d6\u05d0\u05e7\u05e1, \u05d4\u05de\u05db\u05d9\u05dc \u05d0\u05ea \u05d4\u05e1\u05d5\u05e4\u05d9\u05ea \"-\u05e1\" \u05e9\u05e4\u05d9\u05e8\u05d5\u05e9\u05d4 \"\u05d1\u05e0\u05d5 \u05e9\u05dc\" \u05d1\u05d2\u05e8\u05de\u05e0\u05d9\u05ea \u05d5\u05d9\u05d9\u05d3\u05d9\u05e9, \u05d4\u05d5\u05d0 \u05e9\u05dd \u05de\u05e7\u05d1\u05d9\u05dc \u05dc\u05e9\u05dd \u05d4\u05e2\u05d1\u05e8\u05d9 \u05d1\u05df \u05d9\u05e6\u05d7\u05e7. \u05d0\u05d9\u05d6\u05d0\u05e7 / \u05d0\u05d9\u05e1\u05d0\u05e7 \u05e0\u05d2\u05d6\u05e8 \u05de\u05d4\u05e9\u05dd \u05d4\u05e4\u05e8\u05d8\u05d9 \u05d4\u05e2\u05d1\u05e8\u05d9 \u05de\u05de\u05e7\u05d5\u05e8 \u05de\u05e7\u05e8\u05d0\u05d9 \u05d9\u05e6\u05d7\u05e7, \u05d4\u05e9\u05e0\u05d9 \u05de\u05e9\u05dc\u05d5\u05e9\u05ea \u05d4\u05d0\u05d1\u05d5\u05ea, \u05d1\u05e0\u05d5 \u05e9\u05dc \u05d0\u05d1\u05e8\u05d4\u05dd \u05d5\u05e9\u05e8\u05d4. \u05e4\u05d9\u05e8\u05d5\u05e9 \u05e9\u05de\u05d5 \u05de\u05d5\u05e1\u05d1\u05e8 \u05d1\u05de\u05e7\u05e8\u05d0 (\u05d1\u05e8\u05d0\u05e9\u05d9\u05ea, \u05db\"\u05d0, \u05d5). \u05d9\u05e6\u05d7\u05e7 \u05d4\u05d9\u05d4 \u05e9\u05de\u05d5 \u05e9\u05dc \u05d4\u05d9\u05d4\u05d5\u05d3\u05d9 \u05d4\u05e8\u05d0\u05e9\u05d5\u05df \u05e9\u05de\u05ea\u05d5\u05e2\u05d3 \u05d1\u05d4\u05e1\u05d8\u05d5\u05e8\u05d9\u05d4 \u05e9\u05dc \u05d2\u05e8\u05de\u05e0\u05d9\u05d4. \u05db\u05db\u05dc \u05d4\u05e0\u05e8\u05d0\u05d4 \u05d4\u05d5\u05d0 \u05d4\u05d9\u05d4 \u05e1\u05d5\u05d7\u05e8 \u05e9\u05d4\u05ea\u05d2\u05d5\u05e8\u05e8 \u05d1\u05e2\u05d9\u05e8 \u05d0\u05d0\u05db\u05df, \u05d4\u05d5\u05d0 \u05de\u05d5\u05d6\u05db\u05e8 \u05db\u05d0\u05d7\u05d3 \u05d4\u05d7\u05d1\u05e8\u05d9\u05dd \u05d1\u05e9\u05dc\u05d9\u05d7\u05d5\u05ea \u05e9\u05e9\u05dc\u05d7 \u05d4\u05e7\u05d9\u05e1\u05e8 \u05e9\u05e8\u05dc\u05de\u05df (\u05e7\u05e8\u05d5\u05dc \u05d4\u05d2\u05d3\u05d5\u05dc) \u05d0\u05dc \u05d4\u05d7\u05dc\u05d9\u05e3 \u05d7\u05e8\u05d5\u05df \u05d0\u05dc \u05e8\u05e9\u05d9\u05d3 \u05d1\u05e9\u05e0\u05ea 797.\r\n\r\n\u05d9\u05e6\u05d7\u05e7 \u05d4\u05d5\u05d0 \u05e9\u05dd \u05e4\u05e8\u05d8\u05d9 \u05e0\u05e4\u05d5\u05e5 \u05d0\u05e9\u05e8 \u05d9\u05e6\u05e8 \u05e9\u05de\u05d5\u05ea \u05de\u05e9\u05e4\u05d7\u05d4 \u05d9\u05d4\u05d5\u05d3\u05d9\u05d9\u05dd \u05e8\u05d1\u05d9\u05dd \u05d1\u05de\u05e1\u05e4\u05e8 \u05e9\u05e4\u05d5\u05ea, \u05d1\u05d9\u05e0\u05d9\u05d4\u05dd \u05d0\u05d9\u05e6\u05d9\u05e7 \u05d5\u05d4\u05d9\u05e6\u05d9\u05e7 \u05d1\u05d9\u05d9\u05d3\u05d9\u05e9, \u05d0\u05d9\u05e1\u05d0\u05e7\u05d4 \u05d5\u05d0\u05e7\u05d4 \u05d1\u05e6\u05e8\u05e4\u05ea\u05d9\u05ea, \u05d0\u05d9\u05e1\u05d7\u05d0\u05e7 \u05d1\u05e2\u05e8\u05d1\u05d9\u05ea \u05d5\u05d4\u05d9\u05e6'\u05e7\u05d5\u05e7 \u05d1\u05d0\u05e0\u05d2\u05dc\u05d9\u05ea. \u05d1\u05de\u05d0\u05d4 \u05d4-20, \u05d0\u05d9\u05d6\u05d0\u05e7\u05e1 \u05de\u05ea\u05d5\u05e2\u05d3 \u05db\u05e9\u05dd \u05de\u05e9\u05e4\u05d7\u05d4 \u05d9\u05d4\u05d5\u05d3\u05d9\u05e2\u05dd \u05e0\u05d8\u05e2 \u05dc\u05d5\u05d9 \u05d0\u05d9\u05d6\u05d0\u05e7\u05e1 \u05d0\u05e9\u05e8 \u05e0\u05e1\u05e4\u05ea\u05d4 \u05d1\u05de\u05d7\u05e0\u05d4 \u05d4\u05d4\u05e9\u05de\u05d3\u05d4 \u05d4\u05d2\u05e8\u05de\u05e0\u05d9 \u05d0\u05d5\u05e9\u05d5\u05d5\u05d9\u05e5 \u05d1\u05d6\u05de\u05df \u05de\u05dc\u05d7\u05de\u05ea \u05d4\u05e2\u05d5\u05dc\u05dd \u05d4\u05e9\u05e0\u05d9\u05d9\u05d4." - }, - "UnitText2": { - "En": null, - "He": null - }, - "UnitPlaces": [], - "main_image_url": null, - "UnitStatus": 3, - "UnitHeaderDMSoundex": { - "En": "ZZ E044000 ZZ ", - "He": "ZZ E044000 ZZ " - }, - "PrevPictureFileNames": null, - "RightsCode": 1, - "UnitId": 83352, - "IsValueUnit": true, - "StatusDesc": "Completed", - "DisplayStatusDesc": "Museum only", - "UserLexicon": null, - "Attachments": [], - "Slug": { - "En": "familyname_izaacs", - "He": "\u05e9\u05dd\u05de\u05e9\u05e4\u05d7\u05d4_\u05d0\u05d9\u05d6\u05d0\u05e7\u05e1" - }, - "Header": { - "En": "IZAACS", - "He": "\u05d0\u05d9\u05d6\u05d0\u05e7\u05e1" - }, - "ForPreview": false, - "Id": 343879 - }, - "_index": "bhp1" - } - ], - "total": 1, - "max_score": 0.2899917 - }, - "_shards": { - "successful": 5, - "failed": 0, - "total": 5 - }, - "took": 4, - "timed_out": false - } - -## Group Database Items - -### get items [GET /v1/item/{slugs}] - -This view returns a list of jsons representing one or more item(s). - -+ Parameters - + slugs: `place_paris` (string) - The slugs argument is in the form of "collection_slug", as in - "personality_einstein-albert" and could contain multiple slugs split - by commas. - -+ Response 200 (application/json) - - + Body - - [ - { - "LocationInMuseum": null, - "Pictures": [ - { - "PictureId": "00E201C7-BCD4-404A-B551-0D5B1DE8DEE3", - "IsPreview": "0" - }, - { - "PictureId": "5A8D1CC0-3D01-4AB0-B515-4B27873703D8", - "IsPreview": "1" - }, - { - "PictureId": "212BE375-83E7-440A-9C5A-AAE09BEB89B1", - "IsPreview": "0" - }, - { - "PictureId": "29202878-0C3C-4DE6-BE00-B2A708693B2D", - "IsPreview": "0" - }, - { - "PictureId": "5687F54F-66DC-4BCB-A6CD-FB9AEAD4D00A", - "IsPreview": "0" - } - ], - "PictureUnitsIds": "19652,1935,38107,4682,23069,", - "related": [ - "image_ose-summer-camp-for-children-vilkoviskis-lithuania-1929-1930", - "familyname_berlin", - "luminary_moses-ben-nahman", - "place_krefeld", - "image_jewish-settlers-working-in-the-fields-of-gross-gaglow-germany-1930s", - "familyname_weil" - ], - "UpdateDate": "2016-01-07 09:30:00", - "OldUnitId": "HB001520.HTM-EB001338.HTM", - "id": 189648, - "UpdateUser": "simona", - "PrevPictureFileNames": "01934000.JPG,00143500.JPG,03014600.JPG,00418900.JPG,02294100.JPG,", - "PrevPicturePaths": "Photos\\00001024.scn\\01934000.JPG,Photos\\00000033.scn\\00143500.JPG,Photos\\00000639.scn\\03014600.JPG,Photos\\00000285.scn\\00418900.JPG,Photos\\00000807.scn\\02294100.JPG,", - "PlaceTypeCode": 1, - "TS": "\u0000\u0000\u0000\u0000\u0000LZo", - "PlaceTypeDesc": { - "En": "City", - "He": "\u05e2\u05d9\u05e8" - }, - "UnitType": 5, - "UnitTypeDesc": "Place", - "EditorRemarks": "hasavot from Places ", - "thumbnail": { - "path": "Photos/00000033.scn/00143500.JPG", - "data": "..." - }, - "RightsDesc": "Full", - "Bibiliography": { - "En": null, - "He": "\u05d0\u05e0\u05e6\u05d9\u05e7\u05dc\u05d5\u05e4\u05d3\u05d9\u05d4 \u05d9\u05d5\u05d3\u05d0\u05d9\u05e7\u05d4 \n\u05de\u05db\u05d5\u05df \u05e7\u05d5\u05e0\u05d2\u05e8\u05e1 \u05d9\u05d4\u05d5\u05d3\u05d9 \u05e2\u05d5\u05dc\u05de\u05d9" - }, - "UnitText1": { - "En": "PARIS \n\nCapital of France \n\nIn 582, the date of the first documentary evidence of the presence of Jews in Paris, there was already a community with a synagogue. In 614 or 615, the sixth council of Paris decided that Jews who held public office, and their families, must convert to Christianity. From the 12th century on there was a Jewish quarter. According to one of the sources of Joseph ha- Kohen's Emek ha-Bakha, Paris Jews owned about half the land in Paris and the vicinity. They employed many Christian servants and the objects they took in pledge included even church vessels.\n\nFar more portentous was the blood libel which arose against the Jews of Blois in 1171. In 1182, Jews were expelled. The crown confiscated the houses of the Jews as well as the synagogue and the king gave 24 of them to the drapers of Paris and 18 to the furriers. When the Jews were permitted to return to the kingdom of France in 1198 they settled in Paris, in and around the present rue Ferdinand Duval, which became the Jewish quarter once again in the modern era.\n\nThe famous disputation on the Talmud was held in Paris in 1240. The Jewish delegation was led by Jehiel b. Joseph of Paris. After the condemnation of the Talmud, 24 cart-loads of Jewish books were burned in public in the Place de Greve, now the Place de l'Hotel de Ville. A Jewish moneylender called Jonathan was accused of desecrating the host in 1290. It is said that this was the main cause of the expulsion of 1306.\n\nTax rolls of the Jews of Paris of 1292 and 1296 give a good picture of their economic and social status. One striking fact is that a great many of them originated from the provinces. In spite of the prohibition on the settlement of Jews expelled from England, a number of recent arrivals from that country are listed. As in many other places, the profession of physician figures most prominently among the professions noted. The majority of the rest of the Jews engaged in moneylending and commerce. During the same period the composition of the Jewish community, which numbered at least 100 heads of families, changed to a large extent through migration and the number also declined to a marked degree. One of the most illustrious Jewish scholars of medieval France, Judah b. Isaac, known as Sir Leon of Paris, headed the yeshiva of Paris in the early years of the 13th century. He was succeeded by Jehiel b. Joseph, the Jewish leader at the 1240 disputation. After the wholesale destruction of\nJewish books on this occasion until the expulsion of 1306, the yeshivah of Paris produced no more scholars of note.\n\nIn 1315, a small number of Jews returned and were expelled again in 1322. The new community was formed in Paris in 1359. Although the Jews were under the protection of the provost of Paris, this was to no avail against the murderous attacks and looting in 1380 and 1382 perpetrated by a populace in revolt against the tax burden. King Charles VI relieved the Jews of responsibility for the valuable pledges which had been stolen from them on this occasion and granted them other financial concessions, but the community was unable to recover. In 1394, the community was struck by the Denis de Machaut affair. Machaut, a Jewish convert to Christianity, had disappeared and the Jews were accused of having murdered him or, at the very least, of having imprisoned him until he agreed to return to Judaism. Seven Jewish notables were condemned to death, but their sentence was commuted to a heavy fine allied to imprisonment until Machaut reappeared. This affair was a prelude to the \"definitive\" expulsion of the Jews from France in 1394.\n\nFrom the beginning of the 18th century the Jews of Metz applied to the authorities for permission to enter Paris on their business pursuits; gradually the periods of their stay in the capital increased and were prolonged. At the same time, the city saw the arrival of Jews from Bordeaux (the \"Portuguese\") and from Avignon. From 1721 to 1772 a police inspector was given special charge over the Jews.\nAfter the discontinuation of the office, the trustee of the Jews from 1777 was Jacob Rodrigues Pereire, a Jew from Bordeaux, who had charge over a group of Spanish and Portuguese Jews, while the German Jews (from Metz, Alsace, and Loraine) were led by Moses Eliezer Liefman Calmer, and those from Avignon by Israel Salom. The German Jews lived in the poor quarters of Saint-Martin and Saint-Denis, and those from Bordeaux, Bayonne, and Avignon inhabited the more luxurious quarters of Saint Germaine and Saint Andr\u00e9.\n\nLarge numbers of the Jews eked out a miserable living in peddling. The more well-to-do were moneylenders, military purveyors and traders in jewels. There were also some craftsmen among them. Inns preparing kosher food existed from 1721; these also served as prayer rooms. The first publicly acknowledged synagogue was opened in rue de Brisemiche in 1788. The number of Jews of Paris just before the revolution was probably no greater than 500. On Aug. 26, 1789 they presented the constituent assembly with a petition asking for the rights of citizens. Full citizenship rights were granted to the Spanish, Portuguese, and Avignon Jews on Jan. 28, 1790.\n\nAfter the freedom of movement brought about by emancipation, a large influx of Jews arrived in Paris, numbering 2,908 in 1809. When the Jewish population of Paris had reached between 6,000 and 7,000 persons, the Consistory began to build the first great synagogue. The Consistory established its first primary school in 1819.\n\nThe 30,000 or so Jews who lived in Paris in 1869 constituted about 40% of the Jewish population of France. The great majority originated from Metz, Alsace, Lorraine, and Germany, and there were already a few hundreds from Poland. Apart from a very few wealthy capitalists, the great majority of the Jews belonged to the middle economic level. The liberal professions also attracted numerous Jews; the community included an increasing number of professors, lawyers, and physicians. After 1881 the Jewish population increased with the influx of refugees from Poland, Russia, and the Slav provinces of Austria and Romania. At the same time, there was a marked increase in the anti-Semitic movement. The Dreyfus affair, from 1894, split the intellectuals of Paris into \"Dreyfusards\" and \"anti-Dreyfusards\" who frequently clashed on the streets, especially in the Latin Quarter. With the law separating church and state in 1905, the Jewish consistories lost their official status, becoming no more than private religious associations. The growing numbers of Jewish immigrants to Paris resented the heavy hand of a Consistory, which was largely under the control of Jews from Alsace and Lorraine, now a minority group. These immigrants formed the greater part of the 13,000 \"foreign\" Jews who enlisted in World War 1. Especially after 1918, Jews began to arrive from north Africa, Turkey, and the Balkans, and in greatly increased numbers from eastern Europe. Thus in 1939 there were around 150,000 Jews in Paris (over half the total in France). The Jews lived all over the city but there were large concentrations of them in the north and east. More than 150 landmanschaften composed of immigrants from eastern Europe and many charitable societies united large numbers of Jews, while at this period the Paris Consistory (which retained the name with its changed function) had no more than 6,000 members.\n\nOnly one of the 19th-century Jewish primary schools was still in existence in 1939, but a few years earlier the system of Jewish education which was strictly private in nature acquired a secondary school and a properly supervised religious education, for which the Consistory was responsible. Many great Jewish scholars were born and lived in Paris in the modern period. They included the Nobel Prize winners Rene Cassin and A. Lwoff. On June 14, 1940, the Wehrmacht entered Paris, which was proclaimed an open city. Most Parisians left, including the Jews. However, the population returned in the following weeks. A sizable number of well-known Jews fled to England and the USA. (Andre Maurois), while some, e.g. Rene Cassin and Gaston Palewski, joined General de Gaulle's free French movement in London. Parisian Jews were active from the very beginning in resistance movements. The march to the etoile on Nov. 11, 1940, of high school and university students, the first major public manifestation of resistance, included among its organizers Francis Cohen, Suzanne Dijan, and Bernard Kirschen.\n\nThe first roundups of Parisian Jews of foreign nationality took place in 1941; about 5,000 \"foreign\" Jews were deported on May 14, about 8,000 \"foreigners\" in August, and about 100 \"intellectuals\" on December 13. On July 16, 1942, 12,884 Jews were rounded up in Paris (including about 4,000 children). The Parisian Jews represented over half the 85,000 Jews deported from France to extermination camps in the east. During the night of Oct. 2-3, 1941, seven Parisian synagogues were attacked.\n\nSeveral scores of Jews fell in the Paris insurrection in August, 1944. Many streets in Paris and the outlying suburbs bear the names of Jewish heroes and martyrs of the Holocaust period and the memorial to the unknown Jewish martyr, a part of the Centre de documentation juive contemporaire, was erected in in 1956 in the heart of Paris.\n\nBetween 1955 and 1965, the Jewish community experienced a demographic transformation with the arrival of more than 300,000 Sephardi Jews from North Africa. These Jewish immigrants came primarily from Morocco, Tunisia and Egypt. At the time, Morocco and Tunisia were French protectorates unlike Algeria which was directly governed by France. Since their arrival, the Sephardi Jews of North Africa have remained the majority (60%) of French Jewry. \n\nIn 1968 Paris and its suburbs contained about 60% of the Jewish population of France. In 1968 it was estimated at between 300,000 and 350,000 (about 5% of the total population). In 1950, two-thirds of the Jews were concentrated in about a dozen of the poorer or commercial districts in the east of the city. The social and economic advancement of the second generation of east European immigrants, the influx of north Africans, and the gradual implementation of the urban renewal program caused a considerable change in the once Jewish districts and the dispersal of the Jews throughout other districts of Paris.\n\nBetween 1957 and 1966 the number of Jewish communities in the Paris region rose from 44 to 148. The Paris Consistory, traditionally presided over by a member of the Rothschild family, officially provides for all religious needs. Approximately 20 synagogues and meeting places for prayer observing Ashkenazi or Sephardi rites are affiliated with the Consistory, which also provides for the religious needs of new communities in the suburbs. This responsibility is shared by traditional orthodox elements, who, together with the reform and other independent groups, maintain another 30 or so synagogues. The orientation and information office of the Fonds social juif unifie had advised or assisted over 100,000 refugees from north Africa. It works in close cooperation with government services and social welfare and educational institutions of the community. Paris was one of the very few cities in the diaspora with a full-fledged Israel-type school, conducted by Israeli teachers according to an Israeli curriculum. \n\nThe Six-Day War (1967), which drew thousands of Jews into debates and\nPro-Israel demonstrations, was an opportunity for many of them to reassess their personal attitude toward the Jewish people. During the \"students' revolution\" of 1968 in nearby Nanterre and in the Sorbonne, young Jews played an outstanding role in the leadership of left-wing activists and often identified with Arab anti-Israel propaganda extolling the Palestinian organizations. Eventually, however, when the \"revolutionary\" wave subsided, it appeared that the bulk of Jewish students in Paris, including many supporters of various new left groups, remained loyal to Israel and strongly opposed Arab terrorism.\n\nAs of 2015, France was home to the third largest Jewish population in the world. It was also the largest in all of Europe. More than half the Jews in France live in the Paris metropolitan area. According to the World Jewish Congress, an estimated 350,000 Jews live in the city of Paris and its many districts. By 2014, Paris had become the largest Jewish city outside of Israel and the United States. Comprising 6% of the city\u2019s total population (2.2 million), the Jews of Paris are a sizeable minority. \n\nThere are more than twenty organizations dedicated to serving the Jewish community of Paris. Several offer social services while others combat anti-Semitism. There are those like the Paris Consistory which financially supports many of the city's congregations. One of the largest organizations is the Alliance Isra\u00e9lite Universelle which focuses on self-defense, human rights and Jewish education. The FSJU or Unified Social Jewish Fund assists in the absorption of new immigrants. Other major organizations include the ECJC (European Council of Jewish Communities), EAJCC (European Association of Jewish Communities), ACIP (Association Consitoriale Israelit\u00e9), CRIF (Representative Council of Jewish Institutions), and the UEJF (Jewish Students Union of France). \n\nBeing the third largest Jewish city behind New York and Los Angeles, Paris is home to numerous synagogues. By 2013, there were more than eighty three individual congregations. While the majority of these are orthodox, many conservative and liberal congregations can be found across Paris. During the 1980s, the city received an influx of orthodox Jews, primarily as a result of the Lubavitch movement which has since been very active in Paris and throughout France. \n\nApproximately 4% of school-age children in France are enrolled in Jewish day schools. In Paris, there are over thirty private Jewish schools. These include those associated with both the orthodox and liberal movements. Chabad Lubavitch has established many educational programs of its own. The Jewish schools in Paris range from the pre-school to High School level. There are additionally a number of Hebrew schools which enroll students of all ages. \n\nAmong countless cultural institutions are museums and memorials which preserve the city's Jewish history. Some celebrate the works of Jewish artists while others commemorate the Holocaust and remember its victims. The Museum of Jewish art displays sketches by Mane-Katz, the paintings of Alphonse Levy and the lithographs of Chagall. At the Center of Contemporary Jewish Documentation (CDJC), stands the Memorial de la Shoah. Here, visitors can view the center's many Holocaust memorials including the Memorial of the Unknown Jewish Martyrs, the Wall of Names, and the Wall of the Righteous Among the Nations. Located behind the Notre Dame is the Memorial of Deportation, a memorial to the 200,000 Jews who were deported from Vichy France to the Nazi concentration camps. On the wall of a primary school on rue Buffault is a plaque commemorating the 12,000 Parisian Jewish children who died in Auschwitz following their deportation from France between 1942 and 1944.\n\nFor decades, Paris has been the center of the intellectual and cultural life of French Jewry. The city offers a number of institutions dedicated to Jewish history and culture. Located at the Alliance Isra\u00e9lite Universalle is the largest Jewish library in all of Europe. At the Biblioth\u00e8que Medem is the Paris Library of Yiddish. The Mercaz Rashi is home to the University Center for Jewish Studies, a well known destination for Jewish education. One of the most routinely visited cultural centers in Paris is the Chabad House. As of 2014, it was the largest in the world. The Chabad House caters to thousands of Jewish students from Paris and elsewhere every year.\n\nLocated in the city of Paris are certain districts, many of them historic, which are well known for their significant Jewish populations. One in particular is Le Marais \u201cThe Marsh\u201d, which had long been an aristocratic district of Paris until much of the city\u2019s nobility began to move. By the end of the 19th century, the district had become an active commercial area. It was at this time that thousands of Ashkenazi Jews fleeing persecution in Eastern Europe began to settle Le Marais, bringing their specialization in clothing with them. Arriving from Romania, Austria, Hungary and Russia, they developed a new community alongside an already established community of Parisian Jews. As Jewish immigration continued into the mid 20th century, this Jewish quarter in the fourth arrondissement of Paris became known as the \u201cPletzl\u201d, a Yiddish term meaning \u201clittle place\u201d. Despite having been targeted by the Nazis during World War II, the area has continued to be a major center of the Paris Jewish community. Since the 1990s, the area has grown. Along the Rue des Rosiers are a number of Jewish restaurants, bookstores, kosher food outlets and synagogues. Another notable area with a sizeable Jewish community is in the city\u2019s 9th district. Known as the Faubourg-Montmarte, it is home to several synagogues, kosher restaurants as well as many offices to a number of Jewish organizations. \n\nWith centuries-old Jewish neighborhoods, Paris has its share of important Jewish landmarks. Established in 1874 is the Rothschild Synagogue and while it may not be ancient, its main attraction is its rabbis who are well known for being donned in Napoleonic era apparel. The synagogue on Rue Buffault opened in 1877 and was the first synagogue in Paris to adopt the Spanish/Portuguese rite. Next to the synagogue is a memorial dedicated to the 12,000 children who perished in the Holocaust. The Copernic synagogue is the city\u2019s largest non-orthodox congregation. In 1980 it was the target of an anti-Semitic bombing which led to the death of four people during the celebration of Simchat Torah, the first attack against the Jewish people in France since World War II. In the 1970s, the remains of what many believed to have been a Yeshiva were found under the Rouen Law Courts. Just an hour outside of Paris, this site is presumed to be from the 12th century when Jews comprised nearly 20% of the total population. \n\nServing many of the medical needs of the Jewish community of Paris are organizations such as the OSE and CASIP. While the Rothschild hospital provides general medical care, the OSE or Society for the Health of the Jewish Population, offers several health centers around the city. CASIP focuses on providing the community social services include children and elderly homes. \n\nBeing a community of nearly 400,000 people, the Jews of Paris enjoy a diversity of media outlets centered on Jewish culture. Broadcasted every week are Jewish television programs which include news and a variety of entertainment. On radio are several stations such as Shalom Paris which airs Jewish music, news and programming. Circulating throughout Paris are two weekly Jewish papers and a number of monthly journals. One of the city\u2019s major newspapers is the Actualit\u00e9 Juive. There are also online journals such as the Israel Infos and Tribute Juive. ", - "He": "\u05e4\u05e8\u05d9\u05e1\n\n\u05d1\u05d9\u05e8\u05ea \u05e6\u05e8\u05e4\u05ea.\n\n\u05e2\u05d3\u05d5\u05ea \u05e8\u05d0\u05e9\u05d5\u05e0\u05d4 \u05e2\u05dc \u05e7\u05d9\u05d5\u05dd \u05d9\u05d4\u05d5\u05d3\u05d9\u05dd \u05d1\u05e4\u05e8\u05d9\u05e1 \u05e0\u05e9\u05ea\u05de\u05e8\u05d4 \u05de\u05e1\u05d5\u05e3 \u05d4\u05de\u05d0\u05d4 \u05d4-6 \u05d5\u05db\u05d1\u05e8 \u05d0\u05d6 \u05d4\u05d9\u05d9\u05ea\u05d4 \u05d1\u05de\u05e7\u05d5\u05dd \u05e7\u05d4\u05d9\u05dc\u05d4 \u05d9\u05d4\u05d5\u05d3\u05d9\u05ea \u05d5\u05dc\u05d4 \u05d1\u05d9\u05ea-\u05db\u05e0\u05e1\u05ea \u05de\u05e9\u05dc\u05d4. \u05d4\u05e7\u05d4\u05d9\u05dc\u05d4 \u05e7\u05d9\u05d9\u05de\u05d4 \u05d9\u05d7\u05e1\u05d9 \u05e9\u05db\u05e0\u05d5\u05ea \u05ea\u05e7\u05d9\u05e0\u05d9\u05dd \u05e2\u05dd \u05e9\u05d0\u05e8 \u05ea\u05d5\u05e9\u05d1\u05d9 \u05d4\u05e2\u05d9\u05e8.\n\n\u05d4\u05d0\u05d9\u05e1\u05d5\u05e8 \u05e2\u05dc \u05e7\u05d1\u05dc\u05ea \u05d9\u05d4\u05d5\u05d3\u05d9\u05dd \u05dc\u05de\u05e9\u05e8\u05d4 \u05e6\u05d9\u05d1\u05d5\u05e8\u05d9\u05ea, \u05e9\u05e0\u05e7\u05d1\u05e2 \u05d1\u05e7\u05d5\u05e0\u05e1\u05d9\u05dc \u05d4\u05e9\u05d9\u05e9\u05d9 \u05d1\u05e4\u05e8\u05d9\u05e1 (614 \u05d0\u05d5 615), \u05de\u05e2\u05d9\u05d3 \u05e2\u05dc \u05de\u05e2\u05de\u05d3\u05dd \u05d4\u05e8\u05dd \u05d1\u05d7\u05d1\u05e8\u05d4.\n\n\u05de\u05ea\u05d7\u05d9\u05dc\u05ea \u05d4\u05de\u05d0\u05d4 \u05d4-12 \u05d4\u05d9\u05d4 \u05d1\u05e2\u05d9\u05e8 \u05e8\u05d5\u05d1\u05e2 \u05de\u05d9\u05d5\u05d7\u05d3 \u05dc\u05d9\u05d4\u05d5\u05d3\u05d9\u05dd, \u05d5\u05dc\u05d3\u05d1\u05e8\u05d9 \u05d0\u05d7\u05d3 \u05d4\u05de\u05e7\u05d5\u05e8\u05d5\u05ea \u05e9\u05dc \u05d9\u05d5\u05e1\u05e3 \u05d4\u05db\u05d4\u05df, \"\u05e1\u05e4\u05e8 \u05d4\u05d1\u05db\u05d0\", \u05d4\u05d9\u05d5 \u05d1\u05d1\u05e2\u05dc\u05d5\u05ea \u05d9\u05d4\u05d5\u05d3\u05d9\u05ea \u05db\u05de\u05d7\u05e6\u05d9\u05ea \u05d4\u05d0\u05d3\u05de\u05d5\u05ea \u05d1\u05e4\u05e8\u05d9\u05e1 \u05d5\u05e1\u05d1\u05d9\u05d1\u05ea\u05d4. \u05d4\u05d9\u05d5 \u05dc\u05d9\u05d4\u05d5\u05d3\u05d9\u05dd \u05d4\u05e8\u05d1\u05d4 \u05e2\u05d1\u05d3\u05d9\u05dd \u05d5\u05e9\u05e4\u05d7\u05d5\u05ea, \u05d5\u05d1\u05d9\u05df \u05d4\u05e4\u05e7\u05d3\u05d5\u05e0\u05d5\u05ea \u05e9\u05d4\u05d9\u05d5 \u05dc\u05d5\u05e7\u05d7\u05d9\u05dd \u05dc\u05d4\u05d1\u05d8\u05d7\u05ea \u05d4\u05d4\u05dc\u05d5\u05d5\u05d0\u05d5\u05ea \u05d4\u05d9\u05d5 \u05d2\u05dd \u05db\u05dc\u05d9 \u05e4\u05d5\u05dc\u05d7\u05df \u05e0\u05d5\u05e6\u05e8\u05d9\u05d9\u05dd.\n\n\u05e2\u05dc\u05d9\u05dc\u05ea-\u05d3\u05dd \u05e2\u05dc \u05d9\u05d4\u05d5\u05d3\u05d9 \u05d1\u05dc\u05d5\u05d0\u05d4 (1171) \u05e2\u05d5\u05e8\u05e8\u05d4 \u05e1\u05e2\u05e8\u05ea \u05e8\u05d5\u05d7\u05d5\u05ea \u05d2\u05dd \u05d1\u05e4\u05e8\u05d9\u05e1, \u05d5\u05d4\u05d9\u05d9\u05ea\u05d4 \u05d1\u05d9\u05df \u05d4\u05d2\u05d5\u05e8\u05de\u05d9\u05dd \u05dc\u05d2\u05d9\u05e8\u05d5\u05e9\u05dd \u05de\u05d4\u05e2\u05d9\u05e8 \u05d1\u05e9\u05e0\u05ea 1182. \u05d0\u05ea \u05d1\u05ea\u05d9 \u05d4\u05d9\u05d4\u05d5\u05d3\u05d9\u05dd \u05d7\u05d9\u05dc\u05e7 \u05d4\u05de\u05dc\u05da \u05d1\u05d9\u05df \u05e1\u05d5\u05d7\u05e8\u05d9 \u05d4\u05d0\u05e8\u05d9\u05d2\u05d9\u05dd \u05d5\u05d4\u05e4\u05e8\u05d5\u05d5\u05ea \u05d1\u05e2\u05d9\u05e8.\n\n\u05db\u05e2\u05d1\u05d5\u05e8 16 \u05e9\u05e0\u05d4 \u05d4\u05d5\u05ea\u05e8 \u05dc\u05d9\u05d4\u05d5\u05d3\u05d9\u05dd \u05dc\u05d7\u05d6\u05d5\u05e8 \u05dc\u05e4\u05e8\u05d9\u05e1. \u05d4\u05e4\u05e2\u05dd \u05d4\u05ea\u05d9\u05d9\u05e9\u05d1\u05d5 \u05d1\u05d0\u05d9\u05d6\u05d5\u05e8-\u05de\u05d2\u05d5\u05e8\u05d9\u05dd, \u05e9\u05e9\u05d9\u05de\u05e9 \u05d0\u05d5\u05ea\u05dd \u05d2\u05dd \u05d1\u05e2\u05ea \u05d4\u05d7\u05d3\u05e9\u05d4.\n\n\u05d1\u05d9\u05de\u05d9\u05d5 \u05e9\u05dc \u05dc\u05d5\u05d0\u05d9 \u05d4-9 \u05e0\u05e2\u05e8\u05da \u05d1\u05e4\u05e8\u05d9\u05e1 \u05d4\u05d5\u05d5\u05d9\u05db\u05d5\u05d7 \u05d4\u05de\u05e4\u05d5\u05e8\u05e1\u05dd \u05e2\u05dc \u05d4\u05ea\u05dc\u05de\u05d5\u05d3 (1240), \u05e2\u05dd \u05e8' \u05d9\u05d7\u05d9\u05d0\u05dc \u05d1\u05df \u05d9\u05d5\u05e1\u05e3 \u05d1\u05e8\u05d0\u05e9 \u05d4\u05de\u05e9\u05dc\u05d7\u05ea \u05d4\u05d9\u05d4\u05d5\u05d3\u05d9\u05ea \u05d5\u05d4\u05de\u05d5\u05de\u05e8 \u05e0\u05d9\u05e7\u05d5\u05dc\u05d0\u05e1 \u05d3\u05d5\u05e0\u05d9\u05df \u05d1\u05e6\u05d3 \u05e9\u05db\u05e0\u05d2\u05d3. \u05d1\u05ea\u05d5\u05dd \u05d4\u05d5\u05d5\u05d9\u05db\u05d5\u05d7 \u05d4\u05d5\u05e2\u05dc\u05d5 \u05e2\u05dc \u05d4\u05d0\u05e9 \u05d1\u05d0\u05d7\u05ea \u05de\u05db\u05d9\u05db\u05e8\u05d5\u05ea \u05d4\u05e2\u05d9\u05e8 (\u05db\u05d9\u05d5\u05dd \"\u05e4\u05dc\u05d0\u05e1 \u05d3\u05d4 \u05dc'\u05d4\u05d5\u05d8\u05dc \u05d3\u05d4 \u05d5\u05d9\u05dc) \u05e1\u05e4\u05e8\u05d9 \u05e7\u05d5\u05d3\u05e9 \u05e9\u05d4\u05d5\u05d1\u05d0\u05d5 \u05dc\u05de\u05e7\u05d5\u05dd \u05d1-24 \u05e2\u05d2\u05dc\u05d5\u05ea \u05e1\u05d5\u05e1\u05d9\u05dd.\n\n\u05d1- 1290 \u05d4\u05d5\u05d0\u05e9\u05dd \u05d9\u05d4\u05d5\u05d3\u05d9 \u05d1\u05d7\u05d9\u05dc\u05d5\u05dc \u05dc\u05d7\u05dd \u05d4\u05e7\u05d5\u05d3\u05e9; \u05d4\u05d4\u05e1\u05ea\u05d4 \u05e9\u05e0\u05ea\u05dc\u05d5\u05d5\u05ea\u05d4 \u05dc\u05db\u05da \u05d4\u05d9\u05d9\u05ea\u05d4 \u05d4\u05e1\u05d9\u05d1\u05d4 \u05d4\u05e2\u05d9\u05e7\u05e8\u05d9\u05ea \u05dc\u05d2\u05d9\u05e8\u05d5\u05e9 \u05e9\u05dc 1306. \u05de\u05e8\u05e9\u05d9\u05de\u05d5\u05ea \u05d4\u05de\u05e1\u05d9\u05dd \u05e9\u05dc \u05d0\u05d5\u05ea\u05df \u05d4\u05e9\u05e0\u05d9\u05dd \u05de\u05ea\u05d1\u05e8\u05e8, \u05e9\u05e8\u05d1\u05d9\u05dd \u05de\u05d9\u05d4\u05d5\u05d3\u05d9 \u05e4\u05e8\u05d9\u05e1 \u05d4\u05d2\u05d9\u05e2\u05d5 \u05dc\u05de\u05e7\u05d5\u05dd \u05de\u05e2\u05e8\u05d9-\u05e9\u05d3\u05d4, \u05d5\u05d0\u05d7\u05e8\u05d9 1290 \u05e7\u05dc\u05d8\u05d4 \u05d4\u05e7\u05d4\u05d9\u05dc\u05d4, \u05dc\u05de\u05e8\u05d5\u05ea \u05d4\u05d0\u05d9\u05e1\u05d5\u05e8 \u05d4\u05e8\u05e9\u05de\u05d9, \u05d2\u05dd \u05de\u05d2\u05d5\u05e8\u05e9\u05d9\u05dd \u05de\u05d0\u05e0\u05d2\u05dc\u05d9\u05d4. \u05d1\u05d9\u05df \u05d1\u05e2\u05dc\u05d9 \u05d4\u05de\u05e7\u05e6\u05d5\u05e2\u05d5\u05ea \u05d1\u05d5\u05dc\u05d8\u05d9\u05dd \u05d4\u05d9\u05d5 \u05e8\u05d5\u05e4\u05d0\u05d9\u05dd \u05d9\u05d4\u05d5\u05d3\u05d9\u05dd, \u05d0\u05d1\u05dc \u05d4\u05e8\u05d5\u05d1 \u05d4\u05de\u05db\u05e8\u05d9\u05e2 \u05e2\u05e1\u05e7 \u05d1\u05d4\u05dc\u05d5\u05d5\u05d0\u05ea \u05db\u05e1\u05e4\u05d9\u05dd \u05d5\u05d1\u05de\u05e1\u05d7\u05e8. \u05d4\u05e7\u05d4\u05d9\u05dc\u05d4, \u05e9\u05de\u05e0\u05ea\u05d4 \u05d0\u05d6 \u05db\u05de\u05d0\u05d4 \u05d1\u05ea\u05d9-\u05d0\u05d1, \u05e0\u05ea\u05e8\u05d5\u05e9\u05e9\u05d4 \u05e2\u05d3 \u05de\u05d4\u05e8\u05d4 \u05d5\u05e8\u05d1\u05d9\u05dd \u05e2\u05d6\u05d1\u05d5 \u05d0\u05ea \u05d4\u05e2\u05d9\u05e8 \u05e2\u05d5\u05d3 \u05dc\u05e4\u05e0\u05d9 \u05d4\u05d2\u05d9\u05e8\u05d5\u05e9. \u05d9\u05e9\u05d9\u05d1\u05ea \u05e4\u05e8\u05d9\u05e1 \u05d9\u05e8\u05d3\u05d4 \u05de\u05d2\u05d3\u05d5\u05dc\u05ea\u05d4 \u05d0\u05d7\u05e8\u05d9 \u05e9\u05e8\u05d9\u05e4\u05ea \u05d4\u05ea\u05dc\u05de\u05d5\u05d3 \u05d5\u05d2\u05d9\u05e8\u05d5\u05e9 1306.\n\n\u05d1-1315 \u05d7\u05d6\u05e8\u05d5 \u05de\u05e2\u05d8\u05d9\u05dd \u05d5\u05d2\u05d5\u05e8\u05e9\u05d5 \u05e9\u05d5\u05d1 \u05d1-1322. \u05d4\u05d9\u05d9\u05e9\u05d5\u05d1 \u05d4\u05ea\u05d7\u05d3\u05e9 \u05d1\u05e9\u05e0\u05ea 1359 \u05d5\u05d0\u05e3 \u05e9\u05d6\u05db\u05d4 \u05d1\u05d7\u05e1\u05d5\u05ea \u05d4\u05e9\u05dc\u05d8\u05d5\u05e0\u05d5\u05ea \u05d4\u05e6\u05d1\u05d0\u05d9\u05d9\u05dd \u05d1\u05e2\u05d9\u05e8 \u05dc\u05d0 \u05e0\u05d9\u05e6\u05dc \u05de\u05d9\u05d3\u05d9 \u05d4\u05d4\u05de\u05d5\u05df \u05d1\u05d4\u05ea\u05de\u05e8\u05d3\u05d5\u05ea \u05e0\u05d2\u05d3 \u05e0\u05d8\u05dc \u05d4\u05de\u05d9\u05e1\u05d9\u05dd \u05d1\u05e9\u05e0\u05d9\u05dd 1380, 1382. \u05d4\u05de\u05dc\u05da \u05e9\u05d0\u05e8\u05dc \u05d4-6 \u05d0\u05de\u05e0\u05dd \u05e4\u05d8\u05e8 \u05d0\u05ea \u05d4\u05d9\u05d4\u05d5\u05d3\u05d9\u05dd \u05de\u05d0\u05d7\u05e8\u05d9\u05d5\u05ea \u05dc\u05e4\u05e7\u05d3\u05d5\u05e0\u05d5\u05ea \u05d4\u05d9\u05e7\u05e8\u05d9\u05dd \u05e9\u05e0\u05d2\u05d6\u05dc\u05d5 \u05de\u05d4\u05dd \u05d5\u05d4\u05e2\u05e0\u05d9\u05e7 \u05dc\u05d4\u05dd \u05d4\u05e7\u05dc\u05d5\u05ea \u05d0\u05d7\u05e8\u05d5\u05ea, \u05d0\u05d1\u05dc \u05d4\u05e7\u05d4\u05d9\u05dc\u05d4 \u05e9\u05d5\u05d1 \u05dc\u05d0 \u05d4\u05ea\u05d0\u05d5\u05e9\u05e9\u05d4. \u05de\u05db\u05d4 \u05e0\u05d5\u05e1\u05e4\u05ea \u05d4\u05d5\u05e0\u05d7\u05ea\u05d4 \u05e2\u05dc\u05d9\u05d4 \u05d1\u05e4\u05e8\u05e9\u05ea \u05d3\u05e0\u05d9\u05e1 \u05d3\u05d4 \u05de\u05d0\u05e9\u05d5, \u05de\u05d5\u05de\u05e8 \u05e9\u05e0\u05e2\u05dc\u05dd \u05d5\u05d4\u05d9\u05d4\u05d5\u05d3\u05d9\u05dd \u05d4\u05d5\u05d0\u05e9\u05de\u05d5 \u05d1\u05e8\u05e6\u05d9\u05d7\u05ea\u05d5; \u05e2\u05dc \u05e9\u05d1\u05e2\u05d4 \u05de\u05e8\u05d0\u05e9\u05d9 \u05d4\u05e2\u05d3\u05d4 \u05e0\u05d2\u05d6\u05e8 \u05d3\u05d9\u05df- \u05de\u05d5\u05d5\u05ea, \u05d5\u05d4\u05d5\u05d7\u05dc\u05e3 \u05d1\u05e7\u05e0\u05e1 \u05db\u05d1\u05d3 \u05d5\u05d1\u05de\u05d0\u05e1\u05e8. \u05d4\u05d3\u05d1\u05e8 \u05d0\u05d9\u05e8\u05e2 \u05e2\u05dc \u05e1\u05e3 \u05d4\u05d2\u05d9\u05e8\u05d5\u05e9 \u05d4\u05db\u05dc\u05dc\u05d9 \u05de\u05e6\u05e8\u05e4\u05ea \u05d1-1394. \u05d1\u05d9\u05df \u05d2\u05d3\u05d5\u05dc\u05d9 \u05d4\u05e7\u05d4\u05d9\u05dc\u05d4 \u05e2\u05d3 \u05d2\u05d9\u05e8\u05d5\u05e9 \"\u05e1\u05d5\u05e4\u05d9\" \u05d6\u05d4 \u05d4\u05d9\u05d5 \u05d7\u05db\u05de\u05d9 \u05e4\u05e8\u05d9\u05e1 \u05de\u05df \u05d4\u05de\u05d0\u05d4 \u05d4-12, \u05e8' \u05e9\u05dc\u05de\u05d4 \u05d1\u05df \u05de\u05d0\u05d9\u05e8 (\u05d4\u05e8\u05e9\u05d1\"\u05dd) \u05d5\u05e8' \u05d9\u05e2\u05e7\u05d1 \u05d1\u05df \u05de\u05d0\u05d9\u05e8 (\u05e8\u05d1\u05d9\u05e0\u05d5 \u05ea\u05dd); \u05e8\u05d0\u05e9 \u05d4\u05d9\u05e9\u05d9\u05d1\u05d4 \u05e8' \u05de\u05ea\u05ea\u05d9\u05d4\u05d5 \u05d2\u05d0\u05d5\u05df \u05d5\u05d1\u05e0\u05d5 \u05d4\u05e4\u05d5\u05e1\u05e7 \u05d9\u05d7\u05d9\u05d0\u05dc, \u05d1\u05e2\u05dc\u05d9 \u05d4\u05ea\u05d5\u05e1\u05e4\u05d5\u05ea \u05d9' \u05d9\u05d5\u05dd-\u05d8\u05d5\u05d1 \u05d5\u05e8' \u05d7\u05d9\u05d9\u05dd \u05d1\u05df \u05d7\u05e0\u05e0\u05d0\u05dc \u05d4\u05db\u05d4\u05df, \u05d4\u05e4\u05d5\u05e1\u05e7 \u05d9' \u05d0\u05dc\u05d9\u05d4\u05d5 \u05d1\u05df \u05d9\u05d4\u05d5\u05d3\u05d4 \u05d5\u05e8' \u05d9\u05e2\u05e7\u05d1 \u05d1\u05df \u05e9\u05de\u05e2\u05d5\u05df. \u05d1\u05de\u05d0\u05d4 \u05d4-13 - \u05e8\u05d0\u05e9 \u05d4\u05d9\u05e9\u05d9\u05d1\u05d4 \u05e8' \u05d9\u05d4\u05d5\u05d3\u05d4 \u05d1\u05df \u05d9\u05e6\u05d7\u05e7 \u05d5\u05d9\u05d5\u05e8\u05e9\u05d5 \u05e8' \u05d9\u05d7\u05d9\u05d0\u05dc \u05d1\u05df \u05d9\u05d5\u05e1\u05e3, \u05d5\u05d1\u05de\u05d0\u05d4 \u05d4-14 - \u05e8\u05d0\u05e9 \u05d4\u05d9\u05e9\u05d9\u05d1\u05d4 \u05d4\u05e8\u05d1 \u05d4\u05e8\u05d0\u05e9\u05d9 \u05e9\u05dc \u05e6\u05e8\u05e4\u05ea \u05de\u05ea\u05ea\u05d9\u05d4\u05d5 \u05d1\u05df \u05d9\u05d5\u05e1\u05e3.\n\n\u05d1\u05ea\u05d7\u05d9\u05dc\u05ea \u05d4\u05de\u05d0\u05d4 \u05d4-18 \u05d4\u05d5\u05ea\u05e8 \u05dc\u05d9\u05d4\u05d5\u05d3\u05d9\u05dd \u05de\u05de\u05e5 \u05e9\u05d1\u05d0\u05dc\u05d6\u05d0\u05e1 \u05dc\u05d1\u05e7\u05e8 \u05d1\u05e4\u05e8\u05d9\u05e1 \u05dc\u05e8\u05d2\u05dc \u05e2\u05e1\u05e7\u05d9\u05dd, \u05d5\u05d1\u05de\u05e8\u05d5\u05e6\u05ea \u05d4\u05d6\u05de\u05df \u05d4\u05d5\u05d0\u05e8\u05db\u05d4 \u05d9\u05d5\u05ea\u05e8 \u05d5\u05d9\u05d5\u05ea\u05e8 \u05ea\u05e7\u05d5\u05e4\u05ea \u05e9\u05d4\u05d5\u05ea\u05dd \u05d1\u05e2\u05d9\u05e8. \u05dc\u05e6\u05d3\u05dd \u05d4\u05d2\u05d9\u05e2\u05d5 \u05dc\u05e2\u05d9\u05e8 \u05d9\u05d4\u05d5\u05d3\u05d9\u05dd \u05de\u05d1\u05d5\u05e8\u05d3\u05d5 (\u05d4\"\u05e4\u05d5\u05e8\u05d8\u05d5\u05d2\u05d9\u05d6\u05d9\u05dd\") \u05d5\u05de\u05d0\u05d5\u05d5\u05d9\u05e0\u05d9\u05d5\u05df. \u05d1\u05de\u05e9\u05d8\u05e8\u05ea \u05e4\u05e8\u05d9\u05e1 \u05e0\u05ea\u05de\u05e0\u05d4 \u05de\u05e4\u05e7\u05d7 \u05de\u05d9\u05d5\u05d7\u05d3 \u05dc\u05e2\u05e0\u05d9\u05e0\u05d9 \u05d9\u05d4\u05d5\u05d3\u05d9\u05dd. \u05d4\u05de\u05e9\u05e8\u05d4 \u05d1\u05d5\u05d8\u05dc\u05d4, \u05d5\u05de-1777 \u05e9\u05d9\u05de\u05e9\u05d5 \u05d9\u05d4\u05d5\u05d3\u05d9\u05dd \u05db\u05de\u05de\u05d5\u05e0\u05d9\u05dd: \u05d9\u05e2\u05e7\u05d1 \u05e8\u05d5\u05d3\u05e8\u05d9\u05d2\u05d6 \u05e4\u05e8\u05d9\u05d9\u05e8\u05d0 - \u05e2\u05dc \u05d9\u05d5\u05e6\u05d0\u05d9 \u05e1\u05e4\u05e8\u05d3 \u05d5\u05e4\u05d5\u05e8\u05d8\u05d5\u05d2\u05d0\u05dc, \u05de\u05e9\u05d4 \u05d0\u05dc\u05d9\u05e2\u05d6\u05e8 \u05dc\u05d9\u05e4\u05de\u05df \u05e7\u05d0\u05dc\u05de\u05e8 - \u05e2\u05dc \u05d9\u05d5\u05e6\u05d0\u05d9 \u05d2\u05e8\u05de\u05e0\u05d9\u05d4 \u05d5\u05d9\u05e9\u05e8\u05d0\u05dc \u05e9\u05dc\u05d5\u05dd - \u05e2\u05dc \u05d9\u05d4\u05d5\u05d3\u05d9 \u05d0\u05d5\u05d5\u05d9\u05e0\u05d9\u05d5\u05df. \u05d4\"\u05d2\u05e8\u05de\u05e0\u05d9\u05dd\" \u05d9\u05e9\u05d1\u05d5 \u05d1\u05e9\u05db\u05d5\u05e0\u05d5\u05ea \u05d4\u05d3\u05dc\u05d5\u05ea \u05e1\u05e0\u05d8-\u05de\u05d0\u05e8\u05d8\u05df \u05d5\u05e1\u05e0\u05d8-\u05d3\u05e0\u05d9, \u05d4\u05d0\u05d7\u05e8\u05d9\u05dd \u05d1\u05d0\u05de\u05d9\u05d3\u05d5\u05ea \u05de\u05e1\u05d5\u05d2 \u05e1\u05e0\u05d8-\u05d2'\u05e8\u05de\u05df \u05d5\u05e1\u05e0\u05d8-\u05d0\u05e0\u05d3\u05e8\u05d9\u05d9. \u05d9\u05d4\u05d5\u05d3\u05d9\u05dd \u05e8\u05d1\u05d9\u05dd \u05e2\u05e1\u05e7\u05d5 \u05d1\u05e8\u05d5\u05db\u05dc\u05d5\u05ea \u05d5\u05d1\u05de\u05db\u05d9\u05e8\u05ea \u05d1\u05d2\u05d3\u05d9\u05dd \u05de\u05e9\u05d5\u05de\u05e9\u05d9\u05dd. \u05d4\u05de\u05d1\u05d5\u05e1\u05e1\u05d9\u05dd \u05d9\u05d5\u05ea\u05e8 \u05d4\u05d9\u05d5 \u05de\u05dc\u05d5\u05d5\u05d9\u05dd \u05d1\u05e8\u05d9\u05d1\u05d9\u05ea, \u05e1\u05e4\u05e7\u05d9 \u05e1\u05d5\u05e1\u05d9\u05dd \u05dc\u05e6\u05d1\u05d0 \u05d5\u05e1\u05d5\u05d7\u05e8\u05d9 \u05ea\u05db\u05e9\u05d9\u05d8\u05d9\u05dd. \u05d4\u05d9\u05d5 \u05d2\u05dd \u05e2\u05d5\u05d1\u05d3\u05d9 \u05d7\u05e8\u05d9\u05ea\u05d4 \u05d5\u05e8\u05d9\u05e7\u05de\u05d4.\n\n\u05d0\u05db\u05e1\u05e0\u05d9\u05d5\u05ea \u05dc\u05d0\u05d5\u05db\u05dc \u05db\u05e9\u05e8 \u05e0\u05e4\u05ea\u05d7\u05d5 \u05d1-1721 \u05d5\u05e9\u05d9\u05de\u05e9\u05d5 \u05d2\u05dd \u05db\"\u05de\u05e0\u05d9\u05d9\u05e0\u05d9\u05dd\" \u05d7\u05e9\u05d0\u05d9\u05d9\u05dd. \u05d1\u05d9\u05ea-\u05db\u05e0\u05e1\u05ea \u05e8\u05d0\u05e9\u05d5\u05df \u05dc\u05d0 \u05e0\u05e4\u05ea\u05d7 \u05d0\u05dc\u05d0 \u05d1- 1788. \u05e2\u05e8\u05d1 \u05d4\u05de\u05d4\u05e4\u05d9\u05db\u05d4 \u05dc\u05d0 \u05d9\u05e9\u05d1\u05d5 \u05d1\u05e4\u05e8\u05d9\u05e1 \u05d9\u05d5\u05ea\u05e8 \u05de-500 \u05d9\u05d4\u05d5\u05d3\u05d9\u05dd. \u05d1-26 \u05d1\u05d0\u05d5\u05d2\u05d5\u05e1\u05d8 1789 \u05d4\u05d2\u05d9\u05e9\u05d5 \u05e2\u05e6\u05d5\u05de\u05d4 \u05dc\u05d0\u05e1\u05d9\u05e4\u05d4 \u05d4\u05de\u05db\u05d5\u05e0\u05e0\u05ea \u05d5\u05d1\u05d9\u05e7\u05e9\u05d5 \u05d6\u05db\u05d5\u05d9\u05d5\u05ea-\u05d0\u05d6\u05e8\u05d7; \u05d1-28 \u05d1\u05d9\u05e0\u05d5\u05d0\u05e8 1790 \u05d4\u05d5\u05e2\u05e0\u05e7\u05d5 \u05d6\u05db\u05d5\u05d9\u05d5\u05ea \u05d0\u05dc\u05d4 \u05dc\"\u05d9\u05d4\u05d5\u05d3\u05d9\u05dd \u05d4\u05e6\u05e8\u05e4\u05ea\u05d9\u05d9\u05dd\" \u05d9\u05d5\u05e6\u05d0\u05d9 \u05e1\u05e4\u05e8\u05d3, \u05e4\u05d5\u05e8\u05d8\u05d5\u05d2\u05d0\u05dc \u05d5\u05d0\u05d5\u05d5\u05d9\u05e0\u05d9\u05d5\u05df.\n\n\u05d1-1809 \u05db\u05d1\u05e8 \u05de\u05e0\u05d4 \u05d4\u05d9\u05d9\u05e9\u05d5\u05d1 \u05d4\u05d9\u05d4\u05d5\u05d3\u05d9 \u05d1\u05e4\u05e8\u05d9\u05e1 \u05d9\u05d5\u05ea\u05e8 \u05de-2,900 \u05d0\u05d9\u05e9 \u05d5\u05db\u05e2\u05d1\u05d5\u05e8 \u05e2\u05e9\u05e8 \u05e9\u05e0\u05d9\u05dd 6,000 - 7,000. \u05d0\u05d6 \u05e0\u05d9\u05d2\u05e9\u05d4 \u05d4\u05e7\u05d5\u05e0\u05e1\u05d9\u05e1\u05d8\u05d5\u05e8\u05d9\u05d4 \u05dc\u05d1\u05e0\u05d9\u05d9\u05ea \u05d1\u05d9\u05ea-\u05d4\u05db\u05e0\u05e1\u05ea \u05d4\u05d2\u05d3\u05d5\u05dc, \u05d5\u05d4\u05e7\u05d9\u05de\u05d4 \u05d0\u05ea \u05d1\u05d9\u05ea-\u05e1\u05e4\u05e8 \u05d4\u05d9\u05e1\u05d5\u05d3\u05d9 \u05d4\u05e8\u05d0\u05e9\u05d5\u05df. \u05d1-1859 \u05d4\u05d5\u05e2\u05ea\u05e7 \u05de\u05de\u05e5 \u05d1\u05d9\u05ea-\u05d4\u05de\u05d3\u05e8\u05e9 \u05dc\u05e8\u05d1\u05e0\u05d9\u05dd \u05d5\u05d1\u05e9\u05e0\u05d4 \u05e9\u05dc\u05d0\u05d7\u05e8\u05d9\u05d4 \u05e0\u05d5\u05e1\u05d3\u05d4 \u05d1\u05e4\u05e8\u05d9\u05e1 \u05d7\u05d1\u05e8\u05ea \"\u05db\u05dc \u05d9\u05e9\u05e8\u05d0\u05dc \u05d7\u05d1\u05e8\u05d9\u05dd\".\n\n\u05d1-1869 \u05e0\u05e8\u05e9\u05de\u05d5 \u05d1\u05e4\u05e8\u05d9\u05e1 \u05db-30,000 \u05ea\u05d5\u05e9\u05d1\u05d9\u05dd \u05d9\u05d4\u05d5\u05d3\u05d9\u05d9\u05dd (\u05db-%40 \u05de\u05db\u05dc\u05dc \u05d4\u05d9\u05d9\u05e9\u05d5\u05d1 \u05d4\u05d9\u05d4\u05d5\u05d3\u05d9 \u05d1\u05e6\u05e8\u05e4\u05ea), \u05e8\u05d5\u05d1\u05dd \u05d9\u05d5\u05e6\u05d0\u05d9 \u05d0\u05dc\u05d6\u05d0\u05e1, \u05dc\u05d5\u05e8\u05d9\u05d9\u05df \u05d5\u05d2\u05e8\u05de\u05e0\u05d9\u05d4, \u05d5\u05db\u05de\u05d4 \u05de\u05d0\u05d5\u05ea \u05d9\u05d5\u05e6\u05d0\u05d9 \u05e4\u05d5\u05dc\u05d9\u05df. \u05de\u05e2\u05d8\u05d9\u05dd \u05de\u05d0\u05d3 \u05d4\u05d9\u05d5 \u05e2\u05ea\u05d9\u05e8\u05d9-\u05d4\u05d5\u05df; \u05d4\u05e8\u05d5\u05d1 \u05d4\u05de\u05db\u05e8\u05d9\u05e2 \u05d4\u05e9\u05ea\u05d9\u05d9\u05da \u05dc\u05de\u05e2\u05de\u05d3 \u05d4\u05d1\u05d9\u05e0\u05d5\u05e0\u05d9 \u05d4\u05e0\u05de\u05d5\u05da. \u05d1\u05e7\u05e8\u05d1 \u05d4\u05e0\u05d5\u05e2\u05e8 \u05d4\u05d9\u05d4\u05d5\u05d3\u05d9 \u05d8\u05d9\u05e4\u05d7\u05d5 \u05d0\u05ea \u05d0\u05d4\u05d1\u05ea \u05d4\u05e2\u05d1\u05d5\u05d3\u05d4, \u05d5\u05d7\u05dc\u05d4 \u05d2\u05dd \u05e2\u05dc\u05d9\u05d9\u05d4 \u05de\u05ea\u05de\u05d3\u05ea \u05d1\u05de\u05e1\u05e4\u05e8 \u05d4\u05d9\u05d4\u05d5\u05d3\u05d9\u05dd \u05d1\u05e2\u05dc\u05d9 \u05de\u05e7\u05e6\u05d5\u05e2\u05d5\u05ea \u05d7\u05d5\u05e4\u05e9\u05d9\u05d9\u05dd - \u05de\u05d5\u05e8\u05d9\u05dd \u05d1\u05d0\u05e7\u05d3\u05de\u05d9\u05d4, \u05e2\u05d5\u05e8\u05db\u05d9-\u05d3\u05d9\u05df \u05d5\u05e8\u05d5\u05e4\u05d0\u05d9\u05dd.\n\n\u05d1\u05ea\u05d7\u05d9\u05dc\u05ea \u05e9\u05e0\u05d5\u05ea \u05d4-80 \u05e9\u05dc \u05d4\u05de\u05d0\u05d4 \u05d4- 19 \u05d4\u05d2\u05d9\u05e2\u05d5 \u05dc\u05e4\u05e8\u05d9\u05e1 \u05e4\u05dc\u05d9\u05d8\u05d9\u05dd \u05de\u05e8\u05d5\u05e1\u05d9\u05d4 \u05d5\u05de\u05df \u05d4\u05d0\u05d6\u05d5\u05e8\u05d9\u05dd \u05d4\u05e1\u05dc\u05d0\u05d1\u05d9\u05d9\u05dd \u05e9\u05dc \u05d0\u05d5\u05e1\u05d8\u05e8\u05d9\u05d4 \u05d5\u05e8\u05d5\u05de\u05e0\u05d9\u05d4, \u05d5\u05d7\u05dc \u05d2\u05d9\u05d3\u05d5\u05dc \u05e0\u05d9\u05db\u05e8 \u05d1\u05e7\u05e8\u05d1 \u05e2\u05d5\u05d1\u05d3\u05d9-\u05db\u05e4\u05d9\u05d9\u05dd \u05d9\u05d4\u05d5\u05d3\u05d9\u05dd \u05d1\u05e2\u05d9\u05e8. \u05e2\u05dd \u05d6\u05d0\u05ea \u05d2\u05d1\u05e8\u05d4 \u05d2\u05dd \u05d4\u05d4\u05e1\u05ea\u05d4 \u05d4\u05d0\u05e0\u05d8\u05d9\u05e9\u05de\u05d9\u05ea, \u05e9\u05d4\u05d2\u05d9\u05e2\u05d4 \u05dc\u05e9\u05d9\u05d0\u05d4 \u05d1\u05e4\u05e8\u05e9\u05ea \u05d3\u05e8\u05d9\u05d9\u05e4\u05d5\u05e1 (\u05de\u05e9\u05e0\u05ea 1894).\n\n\u05e2\u05dd \u05d4\u05e4\u05e8\u05d3\u05ea \u05d4\u05d3\u05ea \u05de\u05df \u05d4\u05de\u05d3\u05d9\u05e0\u05d4 \u05d1-1905 \u05e0\u05e2\u05e9\u05ea\u05d4 \u05d4\u05e7\u05d5\u05e0\u05e1\u05d9\u05e1\u05d8\u05d5\u05e8\u05d9\u05d4 \u05d4\u05d9\u05d4\u05d5\u05d3\u05d9\u05ea \u05d1\u05e4\u05e8\u05d9\u05e1 \u05d0\u05e8\u05d2\u05d5\u05df \u05d3\u05ea\u05d9 \u05e4\u05e8\u05d8\u05d9; \u05d5\u05e2\u05d3\u05d9\u05d9\u05df \u05d4\u05d9\u05d9\u05ea\u05d4 \u05d1\u05e9\u05dc\u05d9\u05d8\u05ea \u05d9\u05d5\u05e6\u05d0\u05d9 \u05d0\u05dc\u05d6\u05d0\u05e1 \u05d5\u05dc\u05d5\u05e8\u05d9\u05d9\u05df, \u05de\u05d9\u05e2\u05d5\u05d8 \u05d1\u05d9\u05df \u05d9\u05d4\u05d5\u05d3\u05d9 \u05e4\u05e8\u05d9\u05e1, \u05d5\u05d4\u05de\u05d5\u05e0\u05d9 \u05d4\u05de\u05d4\u05d2\u05e8\u05d9\u05dd \u05d4\u05d7\u05d3\u05e9\u05d9\u05dd \u05d4\u05e1\u05ea\u05d9\u05d9\u05d2\u05d5 \u05de\u05de\u05e0\u05d4. \u05de\u05d1\u05d9\u05df \u05d4\u05de\u05d4\u05d2\u05e8\u05d9\u05dd \u05d4\u05d7\u05d3\u05e9\u05d9\u05dd \u05d9\u05e6\u05d0\u05d5 13,000 \"\u05d4\u05d9\u05d4\u05d5\u05d3\u05d9\u05dd \u05d4\u05d6\u05e8\u05d9\u05dd\" \u05e9\u05e9\u05d9\u05e8\u05ea\u05d5 \u05d1\u05e9\u05d5\u05e8\u05d5\u05ea \u05d4\u05e6\u05d1\u05d0 \u05d4\u05e6\u05e8\u05e4\u05ea\u05d9 \u05d1\u05de\u05dc\u05d7\u05de\u05ea-\u05d4\u05e2\u05d5\u05dc\u05dd \u05d4\u05e8\u05d0\u05e9\u05d5\u05e0\u05d4 (1914 - 1918).\n\n\u05d0\u05d7\u05e8\u05d9 \u05d4\u05de\u05dc\u05d7\u05de\u05d4 \u05d4\u05ea\u05d7\u05d9\u05dc\u05d4 \u05d4\u05d2\u05d9\u05e8\u05d4 \u05d9\u05d4\u05d5\u05d3\u05d9\u05ea \u05dc\u05e4\u05e8\u05d9\u05e1 \u05de\u05e6\u05e4\u05d5\u05df-\u05d0\u05e4\u05e8\u05d9\u05e7\u05d4, \u05de\u05d8\u05d5\u05e8\u05e7\u05d9\u05d4, \u05de\u05d0\u05e8\u05e6\u05d5\u05ea \u05d4\u05d1\u05dc\u05e7\u05df \u05d5\u05d1\u05e2\u05d9\u05e7\u05e8 \u05de\u05de\u05d6\u05e8\u05d7-\u05d0\u05d9\u05e8\u05d5\u05e4\u05d4.\n\n\u05d1\u05e9\u05e0\u05ea 1939 \u05d9\u05e9\u05d1\u05d5 \u05d1\u05e4\u05e8\u05d9\u05e1 150,000 \u05d9\u05d4\u05d5\u05d3\u05d9\u05dd, \u05e8\u05d5\u05d1\u05dd \u05d4\u05d9\u05d5 \u05d3\u05d5\u05d1\u05e8\u05d9 \u05d9\u05d9\u05d3\u05d9\u05e9, \u05d5\u05d4\u05d9\u05d5 \u05d9\u05d5\u05ea\u05e8 \u05de\u05de\u05d7\u05e6\u05d9\u05ea \u05d4\u05d9\u05d9\u05e9\u05d5\u05d1 \u05d4\u05d9\u05d4\u05d5\u05d3\u05d9 \u05d1\u05e6\u05e8\u05e4\u05ea \u05db\u05d5\u05dc\u05d4. \u05e8\u05d9\u05db\u05d5\u05d6\u05d9\u05dd \u05d9\u05d4\u05d5\u05d3\u05d9\u05d9\u05dd \u05d4\u05d9\u05d5 \u05d1\u05d0\u05d6\u05d5\u05e8\u05d9\u05dd \u05d4\u05e6\u05e4\u05d5\u05e0\u05d9\u05d9\u05dd \u05d5\u05d4\u05de\u05d6\u05e8\u05d7\u05d9\u05d9\u05dd \u05e9\u05dc \u05d4\u05e2\u05d9\u05e8. \u05d4\u05d9\u05d4\u05d5\u05d3\u05d9\u05dd \u05d4\u05d9\u05d5 \u05de\u05d0\u05d5\u05e8\u05d2\u05e0\u05d9\u05dd \u05d1\u05d9\u05d5\u05ea\u05e8 \u05de-150 \"\u05dc\u05d0\u05e0\u05d3\u05e1\u05de\u05d0\u05e0\u05e9\u05d0\u05e4\u05d8\" (\u05d0\u05e8\u05d2\u05d5\u05e0\u05d9\u05dd \u05e9\u05dc \u05d9\u05d5\u05e6\u05d0\u05d9 \u05e7\u05d4\u05d9\u05dc\u05d5\u05ea \u05e9\u05d5\u05e0\u05d5\u05ea) \u05d5\u05d1\u05d0\u05d2\u05d5\u05d3\u05d5\u05ea \u05de\u05d0\u05d2\u05d5\u05d3\u05d5\u05ea \u05e9\u05d5\u05e0\u05d5\u05ea, \u05d5\u05d0\u05d9\u05dc\u05d5 \u05d4\u05e7\u05d5\u05e0\u05e1\u05d9\u05e1\u05d8\u05d5\u05e8\u05d9\u05d4 \u05e9\u05dc \u05e4\u05e8\u05d9\u05e1 \u05de\u05e0\u05ea\u05d4 \u05e8\u05e7 6,000 \u05d7\u05d1\u05e8\u05d9\u05dd \u05e8\u05e9\u05d5\u05de\u05d9\u05dd. \u05de\u05d1\u05ea\u05d9-\u05d4\u05e1\u05e4\u05e8 \u05d4\u05d9\u05d4\u05d5\u05d3\u05d9\u05d9\u05dd \u05d4\u05d9\u05e9\u05e0\u05d9\u05dd \u05e9\u05e8\u05d3 \u05e8\u05e7 \u05d0\u05d7\u05d3, \u05d0\u05d1\u05dc \u05dc\u05e6\u05d9\u05d3\u05d5 \u05d4\u05ea\u05e7\u05d9\u05d9\u05de\u05d4 \u05e8\u05e9\u05ea \u05d7\u05d9\u05e0\u05d5\u05da \u05d3\u05ea\u05d9 \u05d1\u05d1\u05ea\u05d9-\u05d4\u05db\u05e0\u05e1\u05ea \u05d5\u05d1\"\u05de\u05e0\u05d9\u05d9\u05e0\u05d9\u05dd\", \u05d1\u05d9\u05ea-\u05e1\u05e4\u05e8 \u05ea\u05d9\u05db\u05d5\u05df \u05e4\u05e8\u05d8\u05d9 \u05d5\u05d0\u05e4\u05d9\u05dc\u05d5 \u05db\u05de\u05d4 \u05ea\u05d9\u05db\u05d5\u05e0\u05d9\u05dd \u05de\u05de\u05e9\u05dc\u05ea\u05d9\u05d9\u05dd. \u05dc\u05e2\u05d9\u05ea\u05d5\u05e0\u05d5\u05ea \u05d4\u05d9\u05d4\u05d5\u05d3\u05d9\u05ea \u05d1\u05e6\u05e8\u05e4\u05ea\u05d9\u05ea \u05e0\u05d5\u05e1\u05e4\u05d4 \u05e2\u05ea\u05d5\u05e0\u05d5\u05ea \u05d2\u05dd \u05d1\u05d9\u05d9\u05d3\u05d9\u05e9.\n\n\u05d1\u05d9\u05df \u05d4\u05d0\u05d9\u05e9\u05d9\u05dd \u05d4\u05de\u05d5\u05d1\u05d9\u05dc\u05d9\u05dd \u05d1\u05e7\u05d4\u05d9\u05dc\u05ea \u05d9\u05d4\u05d5\u05d3\u05d9 \u05e4\u05e8\u05d9\u05e1 \u05d4\u05d9\u05d5 \u05d7\u05ea\u05e0\u05d9 \u05e4\u05e8\u05e1 \u05e0\u05d5\u05d1\u05dc \u05e8\u05e0\u05d4 \u05e7\u05d0\u05e1\u05df \u05d5\u05d0' \u05dc\u05d1\u05d5\u05d1. \u05d1\u05d0\u05de\u05e0\u05d5\u05ea \u05d4\u05e6\u05d9\u05d5\u05e8 \u05d5\u05d4\u05e4\u05d9\u05e1\u05d5\u05dc \u05ea\u05e4\u05e1\u05d5 \u05d9\u05d4\u05d5\u05d3\u05d9\u05dd \u05de\u05e7\u05d5\u05dd \u05d1\u05d5\u05dc\u05d8, \u05d1\u05de\u05d9\u05d5\u05d7\u05d3 \u05d1\u05d0\u05e1\u05db\u05d5\u05dc\u05d4 \u05d4\u05e4\u05e8\u05d9\u05e1\u05d0\u05d9\u05ea \u05d1\u05d9\u05df \u05e9\u05ea\u05d9 \u05de\u05dc\u05d7\u05de\u05d5\u05ea- \u05d4\u05e2\u05d5\u05dc\u05dd.\n\n\u05e2\u05e8\u05d1 \u05de\u05dc\u05d7\u05de\u05ea \u05d4\u05e2\u05d5\u05dc\u05dd \u05d4\u05e9\u05e0\u05d9\u05d9\u05d4 (\u05e1\u05e4\u05d8\u05de\u05d1\u05e8 1939) \u05d9\u05e9\u05d1\u05d5 \u05d1\u05e4\u05e8\u05d9\u05e1 \u05dc\u05de\u05e2\u05dc\u05d4 \u05de- 150,000 \u05d9\u05d4\u05d5\u05d3\u05d9\u05dd.\n\n\n\u05ea\u05e7\u05d5\u05e4\u05ea \u05d4\u05e9\u05d5\u05d0\u05d4\n\n\u05d1-14 \u05d1\u05d9\u05d5\u05e0\u05d9 1940 \u05e0\u05db\u05e0\u05e1 \u05d4\u05e6\u05d1\u05d0 \u05d4\u05d2\u05e8\u05de\u05e0\u05d9 \u05dc\u05e4\u05e8\u05d9\u05e1. \u05e8\u05d1\u05d9\u05dd \u05de\u05ea\u05d5\u05e9\u05d1\u05d9 \u05d4\u05e2\u05d9\u05e8 \u05e0\u05de\u05dc\u05d8\u05d5, \u05d0\u05d1\u05dc \u05d7\u05d6\u05e8\u05d5 \u05ea\u05d5\u05da \u05e9\u05d1\u05d5\u05e2\u05d5\u05ea \u05d0\u05d7\u05d3\u05d9\u05dd. \u05d1\u05d9\u05df \u05d4\u05d9\u05d4\u05d5\u05d3\u05d9\u05dd \u05d4\u05d9\u05d5 \u05e8\u05d1\u05d9\u05dd \u05e9\u05d4\u05e2\u05d3\u05d9\u05e4\u05d5 \u05dc\u05d4\u05e9\u05d0\u05e8 \u05d1\u05e6\u05e8\u05e4\u05ea \u05d4\u05d1\u05dc\u05ea\u05d9-\u05db\u05d1\u05d5\u05e9\u05d4, \u05d4\u05d9\u05d5 \u05e9\u05d4\u05e8\u05d7\u05d9\u05e7\u05d5 \u05dc\u05d0\u05e8\u05e6\u05d5\u05ea-\u05d4\u05d1\u05e8\u05d9\u05ea (\u05d3\u05d5\u05d2\u05de\u05ea \u05d4\u05e1\u05d5\u05e4\u05e8 \u05d0\u05e0\u05d3\u05e8\u05d9\u05d9 \u05de\u05d5\u05e8\u05d5\u05d0\u05d4) \u05d5\u05d4\u05d9\u05d5 (\u05dc\u05de\u05e9\u05dc, \u05e8\u05e0\u05d4 \u05e7\u05d0\u05e1\u05df \u05d5\u05d2\u05d0\u05e1\u05d8\u05d5\u05df \u05e4\u05d0\u05dc\u05d1\u05e1\u05e7\u05d9) \u05e9\u05d4\u05e6\u05d8\u05e8\u05e4\u05d5 \u05dc\u05ea\u05e0\u05d5\u05e2\u05ea \u05e6\u05e8\u05e4\u05ea \u05d4\u05d7\u05d5\u05e4\u05e9\u05d9\u05ea \u05e9\u05dc \u05d3\u05d4 \u05d2\u05d5\u05dc \u05d1\u05dc\u05d5\u05e0\u05d3\u05d5\u05df.\n\n\u05d9\u05d4\u05d5\u05d3\u05d9 \u05e4\u05d0\u05e8\u05d9\u05e1 \u05d4\u05d9\u05d5 \u05de\u05e8\u05d0\u05e9\u05d5\u05e0\u05d9 \u05d4\u05e4\u05e2\u05d9\u05dc\u05d9\u05dd \u05d1\u05ea\u05e0\u05d5\u05e2\u05d5\u05ea \u05d4\u05de\u05d7\u05ea\u05e8\u05ea; \u05e4\u05e8\u05d0\u05e0\u05e1\u05d9\u05e1 \u05db\u05d4\u05df, \u05e1\u05d5\u05d6\u05d0\u05df \u05d3\u05d2'\u05d9\u05d0\u05df \u05d5\u05d1\u05e8\u05e0\u05e8\u05d3 \u05e7\u05d9\u05e8\u05e9\u05df \u05d4\u05d9\u05d5 \u05de\u05de\u05d0\u05e8\u05d2\u05e0\u05d9 \u05de\u05e6\u05e2\u05d3 \u05d4\u05e1\u05d8\u05d5\u05d3\u05e0\u05d8\u05d9\u05dd \u05d1-11 \u05d1\u05e0\u05d5\u05d1\u05de\u05d1\u05e8 1940, \u05d4\u05e4\u05d2\u05e0\u05ea \u05d4\u05de\u05d7\u05d0\u05d4 \u05d4\u05e8\u05d0\u05e9\u05d5\u05e0\u05d4 \u05e0\u05d2\u05d3 \u05d4\u05d2\u05e8\u05de\u05e0\u05d9\u05dd \u05d1\u05e4\u05e8\u05d9\u05e1.\n\n\u05d1\u05d0\u05de\u05e6\u05e2 \u05de\u05d0\u05d9 1941 \u05d2\u05d5\u05e8\u05e9\u05d5 \u05de\u05e4\u05e8\u05d9\u05e1 \u05e8\u05d0\u05e9\u05d5\u05e0\u05d9 \"\u05d4\u05d9\u05d4\u05d5\u05d3\u05d9\u05dd \u05d4\u05d6\u05e8\u05d9\u05dd\", \u05db- 5,000 \u05d0\u05d9\u05e9, \u05d5\u05e9\u05d5\u05dc\u05d7\u05d5 \u05dc\u05de\u05d7\u05e0\u05d5\u05ea \u05e8\u05d9\u05db\u05d5\u05d6 \u05d5\u05d4\u05e9\u05de\u05d3\u05d4. \u05d1\u05d0\u05d5\u05d2\u05d5\u05e1\u05d8 \u05e9\u05d5\u05dc\u05d7\u05d5 \u05e2\u05d5\u05d3 8,000, \u05d5\u05d1\u05d3\u05e6\u05de\u05d1\u05e8 \u05d2\u05d5\u05e8\u05e9\u05d5 \u05db\u05de\u05d0\u05d4 \u05d0\u05e0\u05e9\u05d9-\u05e8\u05d5\u05d7 \u05d9\u05d4\u05d5\u05d3\u05d9\u05dd. \u05d1-16 \u05d1\u05d9\u05d5\u05dc\u05d9 1942 \u05e0\u05ea\u05e4\u05e1\u05d5 \u05d1\u05e2\u05d9\u05e8, \u05d1\u05e9\u05d9\u05ea\u05d5\u05e3 \u05e4\u05e2\u05d5\u05dc\u05d4 \u05d1\u05d9\u05df \u05d4\u05db\u05d5\u05d1\u05e9\u05d9\u05dd \u05d4\u05d2\u05e8\u05de\u05e0\u05d9\u05dd \u05dc\u05d1\u05d9\u05df \u05d4\u05d6'\u05e0\u05d3\u05e8\u05de\u05e8\u05d9\u05d4 \u05d4\u05e6\u05e8\u05e4\u05ea\u05d9\u05ea, 12,884 \u05d9\u05d4\u05d5\u05d3\u05d9\u05dd (\u05d1\u05d9\u05e0\u05d9\u05d4\u05dd \u05db-4,000 \u05d9\u05dc\u05d3\u05d9\u05dd).\n\n\u05de\u05e6\u05e8\u05e4\u05ea \u05db\u05d5\u05dc\u05d4 \u05d4\u05d5\u05d1\u05dc\u05d5 \u05dc\u05de\u05d7\u05e0\u05d5\u05ea-\u05d4\u05d4\u05e9\u05de\u05d3\u05d4 \u05d1\u05de\u05d6\u05e8\u05d7 85,000 \u05d9\u05d4\u05d5\u05d3\u05d9\u05dd, \u05d9\u05d5\u05ea\u05e8 \u05de\u05de\u05d7\u05e6\u05d9\u05ea\u05dd \u05d4\u05d9\u05d5 \u05ea\u05d5\u05e9\u05d1\u05d9 \u05e4\u05e8\u05d9\u05e1. \u05d1\u05dc\u05d9\u05dc 3 \u05d1\u05d0\u05d5\u05e7\u05d8\u05d5\u05d1\u05e8 1941 \u05d4\u05d5\u05ea\u05e7\u05e4\u05d5 \u05e9\u05d1\u05e2\u05d4 \u05d1\u05ea\u05d9-\u05db\u05e0\u05e1\u05ea \u05d1\u05e2\u05d9\u05e8 \u05d1\u05d9\u05d3\u05d9 \u05e4\u05d0\u05e9\u05d9\u05e1\u05d8\u05d9\u05dd \u05e6\u05e8\u05e4\u05ea\u05d9\u05d9\u05dd \u05d1\u05d7\u05d5\u05de\u05e8\u05d9-\u05e0\u05e4\u05e5 \u05e9\u05e7\u05d9\u05d1\u05dc\u05d5 \u05de\u05de\u05e9\u05d8\u05e8\u05ea \u05d4\u05d1\u05d8\u05d7\u05d5\u05df \u05d4\u05d2\u05e8\u05de\u05e0\u05d9\u05ea.\n\n\u05d1\u05e2\u05ea \u05d4\u05d4\u05ea\u05e7\u05d5\u05de\u05de\u05d5\u05ea \u05d1\u05e4\u05e8\u05d9\u05e1 \u05d1\u05d0\u05d5\u05d2\u05d5\u05e1\u05d8 1944 \u05e0\u05e4\u05dc\u05d5 \u05e2\u05e9\u05e8\u05d5\u05ea \u05d9\u05d4\u05d5\u05d3\u05d9\u05dd \u05d1\u05e7\u05e8\u05d1\u05d5\u05ea. \u05e8\u05d7\u05d5\u05d1\u05d5\u05ea \u05e8\u05d1\u05d9\u05dd \u05d1\u05e2\u05d9\u05e8 \u05d5\u05d1\u05e4\u05e8\u05d1\u05e8\u05d9\u05d4 \u05e0\u05e7\u05e8\u05d0\u05d9\u05dd \u05e2\u05dc \u05e9\u05de\u05d5\u05ea \u05d2\u05d9\u05d1\u05d5\u05e8\u05d9 \u05d4\u05de\u05d7\u05ea\u05e8\u05ea, \u05d5\u05d1-1956 \u05d4\u05d5\u05e7\u05de\u05d4 \u05d1\u05dc\u05d1 \u05e4\u05e8\u05d9\u05e1 \u05d9\u05d3-\u05d6\u05db\u05e8\u05d5\u05df \u05dc\u05d7\u05dc\u05dc\u05d9 \u05d4\u05e9\u05d5\u05d0\u05d4, \u05d1\u05de\u05e1\u05d2\u05e8\u05ea \u05d4\u05de\u05e8\u05db\u05d6 \u05dc\u05ea\u05d9\u05e2\u05d5\u05d3 \u05d9\u05d4\u05d5\u05d3\u05d9 \u05d6\u05de\u05e0\u05e0\u05d5.\n\n\n\u05e2\u05dc \u05e4\u05d9 \u05de\u05e4\u05e7\u05d3 1968 \u05de\u05e0\u05ea\u05d4 \u05d0\u05d5\u05db\u05dc\u05d5\u05e1\u05d9\u05d9\u05ea \u05e4\u05e8\u05d9\u05e1 2,590,770; \u05d5\u05d1\u05d0\u05d5\u05ea\u05d4 \u05d4\u05e9\u05e0\u05d4 \u05e0\u05d0\u05de\u05d3 \u05de\u05e1\u05e4\u05e8 \u05ea\u05d5\u05e9\u05d1\u05d9\u05d4 \u05d4\u05d9\u05d4\u05d5\u05d3\u05d9\u05dd \u05d1-350,000-300,000 - \u05db%60 \u05de\u05db\u05dc\u05dc \u05d4\u05d9\u05d9\u05e9\u05d5\u05d1 \u05d4\u05d9\u05d4\u05d5\u05d3\u05d9 \u05d1\u05e6\u05e8\u05e4\u05ea. \u05e2\u05dc\u05d9\u05d9\u05ea\u05dd \u05d4\u05db\u05dc\u05db\u05dc\u05d9\u05ea \u05d5\u05d4\u05d7\u05d1\u05e8\u05ea\u05d9\u05ea \u05e9\u05dc \u05d1\u05e0\u05d9 \u05d4\u05d3\u05d5\u05e8 \u05d4\u05e9\u05e0\u05d9 \u05e9\u05dc \u05d4\u05de\u05d4\u05d2\u05e8\u05d9\u05dd \u05d4\u05d9\u05d4\u05d5\u05d3\u05d9\u05dd \u05de\u05de\u05d6\u05e8\u05d7-\u05d0\u05d9\u05e8\u05d5\u05e4\u05d4, \u05e0\u05d4\u05d9\u05e8\u05ea \u05d9\u05d4\u05d5\u05d3\u05d9\u05dd \u05de\u05e6\u05e4\u05d5\u05df- \u05d0\u05e4\u05e8\u05d9\u05e7\u05d4 \u05d5\u05d4\u05e7\u05de\u05ea \u05de\u05e4\u05e2\u05dc\u05d9 \u05d1\u05d9\u05e0\u05d5\u05d9 \u05d7\u05d3\u05e9\u05d9\u05dd; \u05db\u05dc \u05d0\u05dc\u05d4 \u05d2\u05e8\u05de\u05d5 \u05dc\u05e4\u05d9\u05d6\u05d5\u05e8 \u05d4\u05d0\u05d5\u05db\u05dc\u05d5\u05e1\u05d9\u05d9\u05d4 \u05d4\u05d9\u05d4\u05d5\u05d3\u05d9\u05ea \u05d1\u05d1\u05d9\u05e8\u05d4 \u05de\u05e4\u05e8\u05d1\u05e8\u05d9\u05d4 \u05d4\u05de\u05d6\u05e8\u05d7\u05d9\u05d9\u05dd \u05dc\u05d0\u05d6\u05d5\u05e8\u05d9\u05dd \u05d0\u05d7\u05e8\u05d9\u05dd \u05d1\u05e2\u05d9\u05e8. \u05d4\u05de\u05e8\u05db\u05d6\u05d9\u05dd \u05d4\u05d9\u05e9\u05e0\u05d9\u05dd \u05d4\u05ea\u05de\u05dc\u05d0\u05d5 \u05d1\u05d9\u05d4\u05d5\u05d3\u05d9\u05dd \u05e6\u05e4\u05d5\u05df-\u05d0\u05e4\u05e8\u05d9\u05e7\u05e0\u05d9\u05dd \u05d3\u05dc\u05d9-\u05d0\u05de\u05e6\u05e2\u05d9\u05dd, \u05d5\u05d1\u05e9\u05e0\u05d9\u05dd 1966-1957 \u05d2\u05d3\u05dc \u05de\u05e1\u05e4\u05e8 \u05d4\u05e2\u05d3\u05d5\u05ea \u05d4\u05d9\u05d4\u05d5\u05d3\u05d9\u05d5\u05ea \u05d1\u05d0\u05d9\u05d6\u05d5\u05e8 \u05e4\u05e8\u05d9\u05e1 \u05de-44 \u05dc-148.\n\n\u05e2\u05dc \u05d7\u05d9\u05d9 \u05d4\u05d3\u05ea \u05d1\u05e7\u05d4\u05d9\u05dc\u05d4 \u05de\u05de\u05d5\u05e0\u05d4 \u05e8\u05e9\u05de\u05d9\u05ea \u05d4\u05e7\u05d5\u05e0\u05e1\u05d9\u05e1\u05d8\u05d5\u05e8\u05d9\u05d4 \u05e9\u05dc \u05e4\u05e8\u05d9\u05e1, \u05d1\u05e0\u05e9\u05d9\u05d0\u05d5\u05ea\u05d5 \u05d4\u05de\u05e1\u05d5\u05e8\u05ea\u05d9\u05ea \u05e9\u05dc \u05d0\u05d7\u05d3 \u05d4\u05e8\u05d5\u05d8\u05e9\u05d9\u05dc\u05d3\u05d9\u05dd. \u05d4\u05e7\u05d5\u05e0\u05e1\u05d9\u05e1\u05d8\u05d5\u05e8\u05d9\u05d4 \u05d0\u05d9\u05d2\u05d3\u05d4 \u05db-20 \u05d1\u05ea\u05d9-\u05db\u05e0\u05e1\u05ea \u05d5\"\u05de\u05e0\u05d9\u05d9\u05e0\u05d9\u05dd\", \u05d0\u05e9\u05db\u05e0\u05d6\u05d9\u05d9\u05dd \u05d5\u05e1\u05e4\u05e8\u05d3\u05d9\u05d9\u05dd. \u05de\u05dc\u05d1\u05d3 \u05d0\u05dc\u05d4 \u05d4\u05d9\u05d5 \u05db-30 \u05d1\u05ea\u05d9-\u05db\u05e0\u05e1\u05ea \u05e9\u05dc \u05d7\u05e8\u05d3\u05d9\u05dd, \u05e8\u05e4\u05d5\u05e8\u05de\u05d9\u05d9\u05dd \u05d5\u05e7\u05d1\u05d5\u05e6\u05d5\u05ea \u05e2\u05e6\u05de\u05d0\u05d9\u05d5\u05ea, \u05d0\u05d5\u05dc\u05dd \u05e8\u05e7 \u05db\u05e9\u05dc\u05d9\u05e9 \u05de\u05d9\u05d4\u05d5\u05d3\u05d9 \u05e4\u05e8\u05d9\u05e1 \u05e7\u05d9\u05d9\u05de\u05d5 \u05e7\u05e9\u05e8 \u05e2\u05dd \u05de\u05d5\u05e1\u05d3\u05d5\u05ea \u05d4\u05e7\u05d4\u05d9\u05dc\u05d4 \u05dc\u05de\u05d9\u05e0\u05d9\u05d4\u05dd.\n\n\u05d9\u05d5\u05ea\u05e8 \u05de\u05de\u05d0\u05d4 \u05d0\u05dc\u05e3 \u05e4\u05dc\u05d9\u05d8\u05d9\u05dd \u05de\u05e6\u05e4\u05d5\u05df-\u05d0\u05e4\u05e8\u05d9\u05e7\u05d4 \u05e0\u05e2\u05d6\u05e8\u05d5 \u05d1\u05d9\u05d3\u05d9 \u05d0\u05e8\u05d2\u05d5\u05df \u05de\u05d9\u05d5\u05d7\u05d3 \u05d4\u05e4\u05d5\u05e2\u05dc \u05d1\u05e9\u05d9\u05ea\u05d5\u05e3 \u05e2\u05dd \u05d2\u05d5\u05e8\u05de\u05d9\u05dd \u05de\u05de\u05e9\u05dc\u05ea\u05d9\u05d9\u05dd \u05d5\u05de\u05d5\u05e1\u05d3\u05d5\u05ea \u05d7\u05d1\u05e8\u05d4 \u05d5\u05d7\u05d9\u05e0\u05d5\u05da \u05d9\u05d4\u05d5\u05d3\u05d9\u05d9\u05dd. \u05e4\u05e2\u05d5\u05dc\u05d5\u05ea \u05ea\u05e8\u05d1\u05d5\u05ea \u05d5\u05d7\u05d9\u05e0\u05d5\u05da \u05e4\u05e2\u05dc\u05d5 \u05dc\u05d4\u05d2\u05d1\u05e8\u05ea \u05d4\u05ea\u05d5\u05d3\u05e2\u05d4 \u05d4\u05d9\u05d4\u05d5\u05d3\u05d9\u05ea \u05d1\u05e7\u05e8\u05d1 \u05d4\u05e0\u05d5\u05e2\u05e8 \u05d4\u05dc\u05d5\u05de\u05d3; \u05d5\u05e4\u05e8\u05d9\u05e1 \u05d4\u05d9\u05d9\u05ea\u05d4 \u05d0\u05d7\u05ea \u05d4\u05e2\u05e8\u05d9\u05dd \u05d4\u05d9\u05d7\u05d9\u05d3\u05d5\u05ea \u05d1\u05e2\u05d5\u05dc\u05dd \u05e9\u05e7\u05d9\u05d9\u05de\u05d4 \u05d1\u05d9\u05ea-\u05e1\u05e4\u05e8 \u05e2\u05d1\u05e8\u05d9, \u05e9\u05dc\u05d5 \u05ea\u05db\u05e0\u05d9\u05ea \u05dc\u05d9\u05de\u05d5\u05d3\u05d9\u05dd \u05d9\u05e9\u05e8\u05d0\u05dc\u05d9\u05ea \u05dc\u05db\u05dc \u05d3\u05d1\u05e8.\n\n\u05de\u05dc\u05d7\u05de\u05ea \u05e9\u05e9\u05ea \u05d4\u05d9\u05de\u05d9\u05dd \u05d4\u05d5\u05e6\u05d9\u05d0\u05d4 \u05d0\u05dc\u05e4\u05d9 \u05e6\u05e2\u05d9\u05e8\u05d9\u05dd \u05dc\u05d4\u05e4\u05d2\u05e0\u05d5\u05ea \u05d4\u05d6\u05d3\u05d4\u05d5\u05ea \u05e2\u05dd \u05d9\u05e9\u05e8\u05d0\u05dc; \u05d5\u05d2\u05dd \u05d1\"\u05de\u05e8\u05d3 \u05d4\u05e1\u05d8\u05d5\u05d3\u05e0\u05d8\u05d9\u05dd\" (1968) \u05d1\u05dc\u05d8\u05d5 \u05d9\u05d4\u05d5\u05d3\u05d9\u05dd, \u05d5\u05d4\u05d9\u05d5 \u05d7\u05d1\u05e8\u05d9\u05dd \u05d9\u05d4\u05d5\u05d3\u05d9\u05dd \u05d1\u05e7\u05d1\u05d5\u05e6\u05d5\u05ea \u05d4\u05e9\u05de\u05d0\u05dc \u05d4\u05d7\u05d3\u05e9 \u05e9\u05ea\u05de\u05db\u05d5 \u05d1\u05d8\u05e8\u05d5\u05e8 \u05d4\u05e2\u05e8\u05d1\u05d9. \u05d4\u05de\u05ea\u05d9\u05d7\u05d5\u05ea \u05d4\u05d1\u05d9\u05d0\u05d4 \u05dc\u05d7\u05d9\u05db\u05d5\u05db\u05d9\u05dd \u05d1\u05d9\u05df \u05e2\u05e8\u05d1\u05d9\u05dd \u05dc\u05d9\u05d4\u05d5\u05d3\u05d9\u05dd \u05d9\u05d5\u05e6\u05d0\u05d9 \u05e6\u05e4\u05d5\u05df-\u05d0\u05e4\u05e8\u05d9\u05e7\u05d4 \u05d5\u05d4\u05ea\u05d0\u05e8\u05d2\u05e0\u05d5 \u05e7\u05d1\u05d5\u05e6\u05d5\u05ea \u05d9\u05d4\u05d5\u05d3\u05d9\u05d5\u05ea \u05dc\u05d4\u05d2\u05e0\u05d4 \u05e2\u05e6\u05de\u05d9\u05ea.\n\n\u05d1\u05e9\u05e0\u05ea 1997 \u05d7\u05d9\u05d5 \u05d1\u05e6\u05e8\u05e4\u05ea \u05db\u05d5\u05dc\u05d4 \u05db- 600,000 \u05d9\u05d4\u05d5\u05d3\u05d9\u05dd; \u05dc\u05de\u05e2\u05dc\u05d4 \u05de\u05de\u05d7\u05e6\u05d9\u05ea\u05dd (\u05db- 350,000) \u05d9\u05e9\u05d1\u05d5 \u05d1\u05e4\u05e8\u05d9\u05e1 \u05e8\u05d1\u05ea\u05d9. \"\u05d4\u05de\u05d5\u05e2\u05e6\u05d4 \u05e9\u05dc \u05d9\u05d4\u05d5\u05d3\u05d9 \u05e6\u05e8\u05e4\u05ea\"(CRIF) \u05e9\u05d4\u05d5\u05e7\u05de\u05d4 \u05d1\u05e9\u05e0\u05ea 1944 \u05de\u05d9\u05d9\u05e6\u05d2\u05ea \u05d0\u05ea \u05d4\u05e7\u05d4\u05d9\u05dc\u05d5\u05ea \u05d4\u05d9\u05d4\u05d5\u05d3\u05d9\u05d5\u05ea \u05db\u05dc\u05e4\u05d9 \u05d4\u05e9\u05dc\u05d8\u05d5\u05e0\u05d5\u05ea, \u05d5\u05d4\u05e7\u05d5\u05e0\u05e1\u05d9\u05e1\u05d8\u05d5\u05e8\u05d9\u05d4 \u05d0\u05d7\u05e8\u05d0\u05d9\u05ea \u05dc\u05e4\u05e2\u05d9\u05dc\u05d5\u05ea \u05d4\u05d9\u05d4\u05d5\u05d3\u05d9\u05ea \u05d4\u05d3\u05ea\u05d9\u05ea. \u05db\u05dc \u05d4\u05d0\u05e8\u05d2\u05d5\u05e0\u05d9\u05dd \u05d4\u05e6\u05d9\u05d5\u05e0\u05d9\u05d9\u05dd \u05e4\u05d5\u05e2\u05dc\u05d9\u05dd \u05d1\u05e2\u05d9\u05e8 \u05d5\u05db\u05df \u05db\u05e2\u05e9\u05e8\u05d9\u05dd \u05d1\u05ea\u05d9 \u05e1\u05e4\u05e8 \u05d9\u05d4\u05d5\u05d3\u05d9\u05d9\u05dd, \u05e2\u05de\u05de\u05d9\u05d9\u05dd \u05d5\u05ea\u05d9\u05db\u05d5\u05e0\u05d9\u05dd. \u05d5\u05db\u05de\u05e1\u05e4\u05e8 \u05d4\u05d6\u05d4 \u05d1\u05ea\u05d9 \u05db\u05e0\u05e1\u05ea." - }, - "UnitText2": { - "En": null, - "He": null - }, - "UnitPlaces": [], - "main_image_url": "https://storage.googleapis.com/bhs-flat-pics/5A8D1CC0-3D01-4AB0-B515-4B27873703D8.jpg", - "UnitStatus": 3, - "UnitHeaderDMSoundex": { - "En": "ZZ E794000 ZZ ", - "He": "ZZ H794000 ZZ " - }, - "UnitDisplayStatus": 2, - "RightsCode": 1, - "UnitId": 72312, - "IsValueUnit": true, - "StatusDesc": "Completed", - "DisplayStatusDesc": "Museum only", - "PlaceParentTypeCodeDesc": { - "En": "Country" - }, - "PlaceParentId": 66873, - "UserLexicon": null, - "Attachments": [], - "Slug": { - "En": "place_paris", - "He": "\u05de\u05e7\u05d5\u05dd_\u05e4\u05e8\u05d9\u05e1" - }, - "Header": { - "En": "PARIS", - "He": "\u05e4\u05e8\u05d9\u05e1" - }, - "ForPreview": false, - "_id": "571607a576f1023786eada44" - } - ] diff --git a/docs/index.html b/docs/index.html deleted file mode 100644 index 29af79d..0000000 --- a/docs/index.html +++ /dev/null @@ -1,634 +0,0 @@ -API for Beit-Hatfutsot Databases Back to top

API for Beit-Hatfutsot Databases

Genealogical Collection

Search for a Person

Search for a Person
GET/v1/person{?place,first_name,maiden_name,last_name,birth_place,marriage_place,death_place,birth_year,marriage_year,death_year,sex,tree_number}

This view initiates persons search in Beit HaTfutsot genealogical data.

-

Example URI

GET /v1/person?place=&first_name=Albert&maiden_name=&last_name=Einstein&birth_place=&marriage_place=&death_place=&birth_year=&marriage_year=&death_year=&sex=&tree_number=
URI Parameters
HideShow
place
string (optional) 

A place that the person been born, married or died in

-
first_name
string (optional) Example: Albert

Supports two suffixes - ;prefix to look for names -begining with the given string and ;phonetic to use phonetic matching.

-
maiden_name
string (optional) 

Supports two suffixes - ;prefix to look for names -begining with the given string and ;phonetic to use phonetic matching.

-
last_name
string (optional) Example: Einstein

Supports two suffixes - ;prefix to look for names -begining with the given string and ;phonetic to use phonetic matching.

-
birth_place
string (optional) 

Supports two suffixes - ;prefix to look for names -begining with the given string and ;phonetic to use phonetic matching.

-
marriage_place
string (optional) 

Supports two suffixes - ;prefix to look for names -begining with the given string and ;phonetic to use phonetic matching.

-
death_place
string (optional) 

Supports two suffixes - ;prefix to look for names -begining with the given string and ;phonetic to use phonetic matching.

-
birth_year
number (optional) 

Supports an optional fudge factor suffix, i.e. to search for a person -born between 1905 to 1909 use “1907:2”

-
marriage_year
number (optional) 

Supports an optional fudge factor suffix.

-
death_year
number (optional) 

Supports an optional fudge factor suffix.

-
tree_number
number (optional) 

A valid tree number, like 7806

-
sex
String (optional) 

Choices: 'f' 'm'

Response  200
HideShow
Headers
Content-Type: application/json
Body
{
-    "items": [
-        {
-            "Slug": {
-                "En": "person_1196;0.I686"
-            },
-            "birth_place": "Ulm a.D., Germany",
-            "birth_year": 1879,
-            "death_place": "Princeton, U.S.A.",
-            "death_year": 1955,
-            "deceased": true,
-            "id": "I686",
-            "name": [
-                "Albert",
-                "Einstein"
-            ],
-            "parents": [
-                {
-                    "deceased": true,
-                    "id": "I684",
-                    "name": [
-                        "Hermann",
-                        "Einstein"
-                    ],
-                    "parents": [
-                        {
-                            "deceased": true,
-                            "id": "I682",
-                            "name": [
-                                "Abraham Ruppert",
-                                "Einstein"
-                            ],
-                            "sex": "M"
-                        },
-                        {
-                            "deceased": true,
-                            "id": "I683",
-                            "name": [
-                                "Helena",
-                                "Moos"
-                            ],
-                            "sex": "F"
-                        }
-                    ],
-                    "partners": [
-                        {
-                            "children": [],
-                            "deceased": true,
-                            "id": "I685",
-                            "name": [
-                                "Pauline",
-                                "Koch"
-                            ],
-                            "sex": "F"
-                        }
-                    ],
-                    "sex": "M"
-                },
-                {
-                    "deceased": true,
-                    "id": "I685",
-                    "name": [
-                        "Pauline",
-                        "Koch"
-                    ],
-                    "parents": [],
-                    "partners": [
-                        {
-                            "children": [],
-                            "deceased": true,
-                            "id": "I684",
-                            "name": [
-                                "Hermann",
-                                "Einstein"
-                            ],
-                            "sex": "M"
-                        }
-                    ],
-                    "sex": "F"
-                }
-            ],
-            "partners": [
-                {
-                    "children": [
-                        {
-                            "deceased": true,
-                            "id": "I835",
-                            "name": [
-                                "Lieserl",
-                                "Maric"
-                            ],
-                            "partners": [],
-                            "sex": "F"
-                        },
-                        {
-                            "deceased": true,
-                            "id": "I836",
-                            "name": [
-                                "Hans Albert",
-                                "Einstein"
-                            ],
-                            "partners": [
-                                {
-                                    "children": [
-                                        {
-                                            "deceased": false,
-                                            "id": "I839",
-                                            "name": [
-                                                "Bernhard Caesar",
-                                                "Einstein"
-                                            ],
-                                            "sex": "M"
-                                        },
-                                        {
-                                            "deceased": true,
-                                            "id": "I1287",
-                                            "name": [
-                                                "Klaus",
-                                                "Einstein"
-                                            ],
-                                            "sex": "M"
-                                        },
-                                        {
-                                            "deceased": false,
-                                            "id": "I1288",
-                                            "name": [
-                                                "Evelyn",
-                                                "Einstein"
-                                            ],
-                                            "sex": "F"
-                                        }
-                                    ],
-                                    "deceased": true,
-                                    "id": "I838",
-                                    "name": [
-                                        "Frieda",
-                                        "Knecht"
-                                    ],
-                                    "sex": "F"
-                                },
-                                {
-                                    "children": [],
-                                    "deceased": true,
-                                    "id": "I1289",
-                                    "name": [
-                                        "Elizabeth",
-                                        "Roboz"
-                                    ],
-                                    "sex": "F"
-                                }
-                            ],
-                            "sex": "M"
-                        },
-                        {
-                            "deceased": true,
-                            "id": "I837",
-                            "name": [
-                                "Eduard",
-                                "Einstein"
-                            ],
-                            "partners": [],
-                            "sex": "M"
-                        }
-                    ],
-                    "deceased": true,
-                    "id": "I687",
-                    "name": [
-                        "Mileva",
-                        "Maric"
-                    ],
-                    "sex": "F"
-                },
-                {
-                    "children": [],
-                    "deceased": true,
-                    "id": "I688",
-                    "name": [
-                        "Elsa",
-                        "Einstein-Loewenthal"
-                    ],
-                    "sex": "F"
-                }
-            ],
-            "sex": "M",
-            "siblings": [
-                {
-                    "deceased": true,
-                    "id": "I840",
-                    "name": [
-                        "Maja",
-                        "Einstein"
-                    ],
-                    "sex": "F"
-                }
-            ],
-            "tree_num": 1196,
-            "tree_version": 0
-        },
-        ...
-    ],
-    "total": 16
-}

Database Items

get items

get items
GET/v1/item/{slugs}

This view returns a list of jsons representing one or more item(s).

-

Example URI

GET /v1/item/place_paris
URI Parameters
HideShow
slugs
string (required) Example: place_paris

The slugs argument is in the form of “collection_slug”, as in -“personality_einstein-albert” and could contain multiple slugs split -by commas.

-
Response  200
HideShow
Headers
Content-Type: application/json
Body
[
-  {
-    "LocationInMuseum": null,
-    "Pictures": [
-      {
-        "PictureId": "00E201C7-BCD4-404A-B551-0D5B1DE8DEE3",
-        "IsPreview": "0"
-      },
-      {
-        "PictureId": "5A8D1CC0-3D01-4AB0-B515-4B27873703D8",
-        "IsPreview": "1"
-      },
-      {
-        "PictureId": "212BE375-83E7-440A-9C5A-AAE09BEB89B1",
-        "IsPreview": "0"
-      },
-      {
-        "PictureId": "29202878-0C3C-4DE6-BE00-B2A708693B2D",
-        "IsPreview": "0"
-      },
-      {
-        "PictureId": "5687F54F-66DC-4BCB-A6CD-FB9AEAD4D00A",
-        "IsPreview": "0"
-      }
-    ],
-    "PictureUnitsIds": "19652,1935,38107,4682,23069,",
-    "related": [
-      "image_ose-summer-camp-for-children-vilkoviskis-lithuania-1929-1930",
-      "familyname_berlin",
-      "luminary_moses-ben-nahman",
-      "place_krefeld",
-      "image_jewish-settlers-working-in-the-fields-of-gross-gaglow-germany-1930s",
-      "familyname_weil"
-    ],
-    "UpdateDate": "2016-01-07 09:30:00",
-    "OldUnitId": "HB001520.HTM-EB001338.HTM",
-    "id": 189648,
-    "UpdateUser": "simona",
-    "PrevPictureFileNames": "01934000.JPG,00143500.JPG,03014600.JPG,00418900.JPG,02294100.JPG,",
-    "PrevPicturePaths": "Photos\\00001024.scn\\01934000.JPG,Photos\\00000033.scn\\00143500.JPG,Photos\\00000639.scn\\03014600.JPG,Photos\\00000285.scn\\00418900.JPG,Photos\\00000807.scn\\02294100.JPG,",
-    "PlaceTypeCode": 1,
-    "TS": "\u0000\u0000\u0000\u0000\u0000LZo",
-    "PlaceTypeDesc": {
-      "En": "City",
-      "He": "עיר"
-    },
-    "UnitType": 5,
-    "UnitTypeDesc": "Place",
-    "EditorRemarks": "hasavot from Places ",
-    "thumbnail": {
-      "path": "Photos/00000033.scn/00143500.JPG",
-      "data": "..."
-    },
-    "RightsDesc": "Full",
-    "Bibiliography": {
-      "En": null,
-      "He": "אנציקלופדיה יודאיקה \nמכון קונגרס יהודי עולמי"
-    },
-    "UnitText1": {
-      "En": "PARIS \n\nCapital of France \n\nIn 582, the date of the first documentary evidence of the presence of Jews in Paris, there was already a community with a synagogue. In 614 or 615, the sixth council of Paris decided that Jews who held public office, and their families, must convert to Christianity. From the 12th century on there was a Jewish quarter. According to one of the sources of Joseph ha- Kohen's Emek ha-Bakha, Paris Jews owned about half the land in Paris and the vicinity. They employed many Christian servants and the objects they took in pledge included even church vessels.\n\nFar more portentous was the blood libel which arose against the Jews of Blois in 1171. In 1182, Jews were expelled. The crown confiscated the houses of the Jews as well as the synagogue and the king gave 24 of them to the drapers of Paris and 18 to the furriers. When the Jews were permitted to return to the kingdom of France in 1198 they settled in Paris, in and around the present rue Ferdinand Duval, which became the Jewish quarter once again in the modern era.\n\nThe famous disputation on the Talmud was held in Paris in 1240. The Jewish delegation was led by Jehiel b. Joseph of Paris. After the condemnation of the Talmud, 24 cart-loads of Jewish books were burned in public in the Place de Greve, now the Place de l'Hotel de Ville. A Jewish moneylender called Jonathan was accused of desecrating the host in 1290. It is said that this was the main cause of the expulsion of 1306.\n\nTax rolls of the Jews of Paris of 1292 and 1296 give a good picture of their economic and social status. One striking fact is that a great many of them originated from the provinces. In spite of the prohibition on the settlement of Jews expelled from England, a number of recent arrivals from that country are listed. As in many other places, the profession of physician figures most prominently among the professions noted. The majority of the rest of the Jews engaged in moneylending and commerce. During the same period the composition of the Jewish community, which numbered at least 100 heads of families, changed to a large extent through migration and the number also declined to a marked degree. One of the most illustrious Jewish scholars of medieval France, Judah b. Isaac, known as Sir Leon of Paris, headed the yeshiva of Paris in the early years of the 13th century. He was succeeded by Jehiel b. Joseph, the Jewish leader at the 1240 disputation. After the wholesale destruction of\nJewish books on this occasion until the expulsion of 1306, the yeshivah of Paris produced no more scholars of note.\n\nIn 1315, a small number of Jews returned and were expelled again in 1322. The new community was formed in Paris in 1359. Although the Jews were under the protection of the provost of Paris, this was to no avail against the murderous attacks and looting in 1380 and 1382 perpetrated by a populace in revolt against the tax burden. King Charles VI relieved the Jews of responsibility for the valuable pledges which had been stolen from them on this occasion and granted them other financial concessions, but the community was unable to recover. In 1394, the community was struck by the Denis de Machaut affair. Machaut, a Jewish convert to Christianity, had disappeared and the Jews were accused of having murdered him or, at the very least, of having imprisoned him until he agreed to return to Judaism. Seven Jewish notables were condemned to death, but their sentence was commuted to a heavy fine allied to imprisonment until Machaut reappeared. This affair was a prelude to the \"definitive\" expulsion of the Jews from France in 1394.\n\nFrom the beginning of the 18th century the Jews of Metz applied to the authorities for permission to enter Paris on their business pursuits; gradually the periods of their stay in the capital increased and were prolonged. At the same time, the city saw the arrival of Jews from Bordeaux (the \"Portuguese\") and from Avignon. From 1721 to 1772 a police inspector was given special charge over the Jews.\nAfter the discontinuation of the office, the trustee of the Jews from 1777 was Jacob Rodrigues Pereire, a Jew from Bordeaux, who had charge over a group of Spanish and Portuguese Jews, while the German Jews (from Metz, Alsace, and Loraine) were led by Moses Eliezer Liefman Calmer, and those from Avignon by Israel Salom. The German Jews lived in the poor quarters of Saint-Martin and Saint-Denis, and those from Bordeaux, Bayonne, and Avignon inhabited the more luxurious quarters of Saint Germaine and Saint André.\n\nLarge numbers of the Jews eked out a miserable living in peddling. The more well-to-do were moneylenders, military purveyors and traders in jewels. There were also some craftsmen among them. Inns preparing kosher food existed from 1721; these also served as prayer rooms. The first publicly acknowledged synagogue was opened in rue de Brisemiche in 1788. The number of Jews of Paris just before the revolution was probably no greater than 500. On Aug. 26, 1789 they presented the constituent assembly with a petition asking for the rights of citizens. Full citizenship rights were granted to the Spanish, Portuguese, and Avignon Jews on Jan. 28, 1790.\n\nAfter the freedom of movement brought about by emancipation, a large influx of Jews arrived in Paris, numbering 2,908 in 1809. When the Jewish population of Paris had reached between 6,000 and 7,000 persons, the Consistory began to build the first great synagogue. The Consistory established its first primary school in 1819.\n\nThe 30,000 or so Jews who lived in Paris in 1869 constituted about 40% of the Jewish population of France. The great majority originated from Metz, Alsace, Lorraine, and Germany, and there were already a few hundreds from Poland. Apart from a very few wealthy capitalists, the great majority of the Jews belonged to the middle economic level. The liberal professions also attracted numerous Jews; the community included an increasing number of professors, lawyers, and physicians. After 1881 the Jewish population increased with the influx of refugees from Poland, Russia, and the Slav provinces of Austria and Romania. At the same time, there was a marked increase in the anti-Semitic movement. The Dreyfus affair, from 1894, split the intellectuals of Paris into \"Dreyfusards\" and \"anti-Dreyfusards\" who frequently clashed on the streets, especially in the Latin Quarter. With the law separating church and state in 1905, the Jewish consistories lost their official status, becoming no more than private religious associations. The growing numbers of Jewish immigrants to Paris resented the heavy hand of a Consistory, which was largely under the control of Jews from Alsace and Lorraine, now a minority group. These immigrants formed the greater part of the 13,000 \"foreign\" Jews who enlisted in World War 1. Especially after 1918, Jews began to arrive from north Africa, Turkey, and the Balkans, and in greatly increased numbers from eastern Europe. Thus in 1939 there were around 150,000 Jews in Paris (over half the total in France). The Jews lived all over the city but there were large concentrations of them in the north and east. More than 150 landmanschaften composed of immigrants from eastern Europe and many charitable societies united large numbers of Jews, while at this period the Paris Consistory (which retained the name with its changed function) had no more than 6,000 members.\n\nOnly one of the 19th-century Jewish primary schools was still in existence in 1939, but a few years earlier the system of Jewish education which was strictly private in nature acquired a secondary school and a properly supervised religious education, for which the Consistory was responsible. Many great Jewish scholars were born and lived in Paris in the modern period. They included the Nobel Prize winners Rene Cassin and A. Lwoff. On June 14, 1940, the Wehrmacht entered Paris, which was proclaimed an open city. Most Parisians left, including the Jews. However, the population returned in the following weeks. A sizable number of well-known Jews fled to England and the USA. (Andre Maurois), while some, e.g. Rene Cassin and Gaston Palewski, joined General de Gaulle's free French movement in London. Parisian Jews were active from the very beginning in resistance movements. The march to the etoile on Nov. 11, 1940, of high school and university students, the first major public manifestation of resistance, included among its organizers Francis Cohen, Suzanne Dijan, and Bernard Kirschen.\n\nThe first roundups of Parisian Jews of foreign nationality took place in 1941; about 5,000 \"foreign\" Jews were deported on May 14, about 8,000 \"foreigners\" in August, and about 100 \"intellectuals\" on December 13. On July 16, 1942, 12,884 Jews were rounded up in Paris (including about 4,000 children). The Parisian Jews represented over half the 85,000 Jews deported from France to extermination camps in the east. During the night of Oct. 2-3, 1941, seven Parisian synagogues were attacked.\n\nSeveral scores of Jews fell in the Paris insurrection in August, 1944. Many streets in Paris and the outlying suburbs bear the names of Jewish heroes and martyrs of the Holocaust period and the memorial to the unknown Jewish martyr, a part of the Centre de documentation juive contemporaire, was erected in in 1956 in the heart of Paris.\n\nBetween 1955 and 1965, the Jewish community experienced a demographic transformation with the arrival of more than 300,000 Sephardi Jews from North Africa. These Jewish immigrants came primarily from Morocco, Tunisia and Egypt. At the time, Morocco and Tunisia were French protectorates unlike Algeria which was directly governed by France. Since their arrival, the Sephardi Jews of North Africa have remained the majority (60%) of French Jewry. \n\nIn 1968 Paris and its suburbs contained about 60% of the Jewish population of France. In 1968 it was estimated at between 300,000 and 350,000 (about 5% of the total population). In 1950, two-thirds of the Jews were concentrated in about a dozen of the poorer or commercial districts in the east of the city. The social and economic advancement of the second generation of east European immigrants, the influx of north Africans, and the gradual implementation of the urban renewal program caused a considerable change in the once Jewish districts and the dispersal of the Jews throughout other districts of Paris.\n\nBetween 1957 and 1966 the number of Jewish communities in the Paris region rose from 44 to 148. The Paris Consistory, traditionally presided over by a member of the Rothschild family, officially provides for all religious needs. Approximately 20 synagogues and meeting places for prayer observing Ashkenazi or Sephardi rites are affiliated with the Consistory, which also provides for the religious needs of new communities in the suburbs. This responsibility is shared by traditional orthodox elements, who, together with the reform and other independent groups, maintain another 30 or so synagogues. The orientation and information office of the Fonds social juif unifie had advised or assisted over 100,000 refugees from north Africa. It works in close cooperation with government services and social welfare and educational institutions of the community. Paris was one of the very few cities in the diaspora with a full-fledged Israel-type school, conducted by Israeli teachers according to an Israeli curriculum. \n\nThe Six-Day War (1967), which drew thousands of Jews into debates and\nPro-Israel demonstrations, was an opportunity for many of them to reassess their personal attitude toward the Jewish people. During the \"students' revolution\" of 1968 in nearby Nanterre and in the Sorbonne, young Jews played an outstanding role in the leadership of left-wing activists and often identified with Arab anti-Israel propaganda extolling the Palestinian organizations. Eventually, however, when the \"revolutionary\" wave subsided, it appeared that the bulk of Jewish students in Paris, including many supporters of various new left groups, remained loyal to Israel and strongly opposed Arab terrorism.\n\nAs of 2015, France was home to the third largest Jewish population in the world. It was also the largest in all of Europe. More than half the Jews in France live in the Paris metropolitan area. According to the World Jewish Congress, an estimated 350,000 Jews live in the city of Paris and its many districts. By 2014, Paris had become the largest Jewish city outside of Israel and the United States. Comprising 6% of the city’s total population (2.2 million), the Jews of Paris are a sizeable minority. \n\nThere are more than twenty organizations dedicated to serving the Jewish community of Paris. Several offer social services while others combat anti-Semitism. There are those like the Paris Consistory which financially supports many of the city's congregations. One of the largest organizations is the Alliance Israélite Universelle which focuses on self-defense, human rights and Jewish education. The FSJU or Unified Social Jewish Fund assists in the absorption of new immigrants. Other major organizations include the ECJC (European Council of Jewish Communities), EAJCC (European Association of Jewish Communities), ACIP (Association Consitoriale Israelité), CRIF (Representative Council of Jewish Institutions), and the UEJF (Jewish Students Union of France). \n\nBeing the third largest Jewish city behind New York and Los Angeles, Paris is home to numerous synagogues. By 2013, there were more than eighty three individual congregations. While the majority of these are orthodox, many conservative and liberal congregations can be found across Paris. During the 1980s, the city received an influx of orthodox Jews, primarily as a result of the Lubavitch movement which has since been very active in Paris and throughout France. \n\nApproximately 4% of school-age children in France are enrolled in Jewish day schools. In Paris, there are over thirty private Jewish schools. These include those associated with both the orthodox and liberal movements. Chabad Lubavitch has established many educational programs of its own. The Jewish schools in Paris range from the pre-school to High School level. There are additionally a number of Hebrew schools which enroll students of all ages.  \n\nAmong countless cultural institutions are museums and memorials which preserve the city's Jewish history. Some celebrate the works of Jewish artists while others commemorate the Holocaust and remember its victims. The Museum of Jewish art displays sketches by Mane-Katz, the paintings of Alphonse Levy and the lithographs of Chagall. At the Center of Contemporary Jewish Documentation (CDJC), stands the Memorial de la Shoah. Here, visitors can view the center's many Holocaust memorials including the Memorial of the Unknown Jewish Martyrs, the Wall of Names, and the Wall of the Righteous Among the Nations. Located behind the Notre Dame is the Memorial of Deportation, a memorial to the 200,000 Jews who were deported from Vichy France to the Nazi concentration camps. On the wall of a primary school on rue Buffault is a plaque commemorating the 12,000 Parisian Jewish children who died in Auschwitz following their deportation from France between 1942 and 1944.\n\nFor decades, Paris has been the center of the intellectual and cultural life of French Jewry. The city offers a number of institutions dedicated to Jewish history and culture. Located at the Alliance Israélite Universalle is the largest Jewish library in all of Europe. At the Bibliothèque Medem is the Paris Library of Yiddish. The Mercaz Rashi is home to the University Center for Jewish Studies, a well known destination for Jewish education. One of the most routinely visited cultural centers in Paris is the Chabad House. As of 2014, it was the largest in the world. The Chabad House caters to thousands of Jewish students from Paris and elsewhere every year.\n\nLocated in the city of Paris are certain districts, many of them historic, which are well known for their significant Jewish populations. One in particular is Le Marais “The Marsh”, which had long been an aristocratic district of Paris until much of the city’s nobility began to move. By the end of the 19th century, the district had become an active commercial area. It was at this time that thousands of Ashkenazi Jews fleeing persecution in Eastern Europe began to settle Le Marais, bringing their specialization in clothing with them. Arriving from Romania, Austria, Hungary and Russia, they developed a new community alongside an already established community of Parisian Jews. As Jewish immigration continued into the mid 20th century, this Jewish quarter in the fourth arrondissement of Paris became known as the “Pletzl”, a Yiddish term meaning “little place”. Despite having been targeted by the Nazis during World War II, the area has continued to be a major center of the Paris Jewish community. Since the 1990s, the area has grown. Along the Rue des Rosiers are a number of Jewish restaurants, bookstores, kosher food outlets and synagogues. Another notable area with a sizeable Jewish community is in the city’s 9th district. Known as the Faubourg-Montmarte, it is home to several synagogues, kosher restaurants as well as many offices to a number of Jewish organizations. \n\nWith centuries-old Jewish neighborhoods, Paris has its share of important Jewish landmarks. Established in 1874 is the Rothschild Synagogue and while it may not be ancient, its main attraction is its rabbis who are well known for being donned in Napoleonic era apparel. The synagogue on Rue Buffault opened in 1877 and was the first synagogue in Paris to adopt the Spanish/Portuguese rite. Next to the synagogue is a memorial dedicated to the 12,000 children who perished in the Holocaust. The Copernic synagogue is the city’s largest non-orthodox congregation. In 1980 it was the target of an anti-Semitic bombing which led to the death of four people during the celebration of Simchat Torah, the first attack against the Jewish people in France since World War II. In the 1970s, the remains of what many believed to have been a Yeshiva were found under the Rouen Law Courts. Just an hour outside of Paris, this site is presumed to be from the 12th century when Jews comprised nearly 20% of the total population. \n\nServing many of the medical needs of the Jewish community of Paris are organizations such as the OSE and CASIP. While the Rothschild hospital provides general medical care, the OSE or Society for the Health of the Jewish Population, offers several health centers around the city. CASIP focuses on providing the community social services include children and elderly homes. \n\nBeing a community of nearly 400,000 people, the Jews of Paris enjoy a diversity of media outlets centered on Jewish culture. Broadcasted every week are Jewish television programs which include news and a variety of entertainment. On radio are several stations such as Shalom Paris which airs Jewish music, news and programming. Circulating throughout Paris are two weekly Jewish papers and a number of monthly journals. One of the city’s major newspapers is the Actualité Juive. There are also online journals such as the Israel Infos and Tribute Juive. ",
-      "He": "פריס\n\nבירת צרפת.\n\nעדות ראשונה על קיום יהודים בפריס נשתמרה מסוף המאה ה-6 וכבר אז הייתה במקום קהילה יהודית ולה בית-כנסת משלה. הקהילה קיימה יחסי שכנות תקינים עם שאר תושבי העיר.\n\nהאיסור על קבלת יהודים למשרה ציבורית, שנקבע בקונסיל השישי בפריס (614 או 615), מעיד על מעמדם הרם בחברה.\n\nמתחילת המאה ה-12 היה בעיר רובע מיוחד ליהודים, ולדברי אחד המקורות של יוסף הכהן, \"ספר הבכא\", היו בבעלות יהודית כמחצית האדמות בפריס וסביבתה. היו ליהודים הרבה עבדים ושפחות, ובין הפקדונות שהיו לוקחים להבטחת ההלוואות היו גם כלי פולחן נוצריים.\n\nעלילת-דם על יהודי בלואה (1171) עוררה סערת רוחות גם בפריס, והייתה בין הגורמים לגירושם מהעיר בשנת 1182. את בתי היהודים חילק המלך בין סוחרי האריגים והפרוות בעיר.\n\nכעבור 16 שנה הותר ליהודים לחזור לפריס. הפעם התיישבו באיזור-מגורים, ששימש אותם גם בעת החדשה.\n\nבימיו של לואי ה-9 נערך בפריס הוויכוח המפורסם על התלמוד (1240), עם ר' יחיאל בן יוסף בראש המשלחת היהודית והמומר ניקולאס דונין בצד שכנגד. בתום הוויכוח הועלו על האש באחת מכיכרות העיר (כיום \"פלאס דה ל'הוטל דה ויל) ספרי קודש שהובאו למקום ב-24 עגלות סוסים.\n\nב- 1290 הואשם יהודי בחילול לחם הקודש; ההסתה שנתלוותה לכך הייתה הסיבה העיקרית לגירוש של 1306. מרשימות המסים של אותן השנים מתברר, שרבים מיהודי פריס הגיעו למקום מערי-שדה, ואחרי 1290 קלטה הקהילה, למרות האיסור הרשמי, גם מגורשים מאנגליה. בין בעלי המקצועות בולטים היו רופאים יהודים, אבל הרוב המכריע עסק בהלוואת כספים ובמסחר. הקהילה, שמנתה אז כמאה בתי-אב, נתרוששה עד מהרה ורבים עזבו את העיר עוד לפני הגירוש. ישיבת פריס ירדה מגדולתה אחרי שריפת התלמוד וגירוש 1306.\n\nב-1315 חזרו מעטים וגורשו שוב ב-1322. היישוב התחדש בשנת 1359 ואף שזכה בחסות השלטונות הצבאיים בעיר לא ניצל מידי ההמון בהתמרדות נגד נטל המיסים בשנים 1380, 1382. המלך שארל ה-6 אמנם פטר את היהודים מאחריות לפקדונות היקרים שנגזלו מהם והעניק להם הקלות אחרות, אבל הקהילה שוב לא התאוששה. מכה נוספת הונחתה עליה בפרשת דניס דה מאשו, מומר שנעלם והיהודים הואשמו ברציחתו; על שבעה מראשי העדה נגזר דין- מוות, והוחלף בקנס כבד ובמאסר. הדבר אירע על סף הגירוש הכללי מצרפת ב-1394. בין גדולי הקהילה עד גירוש \"סופי\" זה היו חכמי פריס מן המאה ה-12, ר' שלמה בן מאיר (הרשב\"ם) ור' יעקב בן מאיר (רבינו תם); ראש הישיבה ר' מתתיהו גאון ובנו הפוסק יחיאל, בעלי התוספות י' יום-טוב ור' חיים בן חננאל הכהן, הפוסק י' אליהו בן יהודה ור' יעקב בן שמעון. במאה ה-13 - ראש הישיבה ר' יהודה בן יצחק ויורשו ר' יחיאל בן יוסף, ובמאה ה-14 - ראש הישיבה הרב הראשי של צרפת מתתיהו בן יוסף.\n\nבתחילת המאה ה-18 הותר ליהודים ממץ שבאלזאס לבקר בפריס לרגל עסקים, ובמרוצת הזמן הוארכה יותר ויותר תקופת שהותם בעיר. לצדם הגיעו לעיר יהודים מבורדו (ה\"פורטוגיזים\") ומאוויניון. במשטרת פריס נתמנה מפקח מיוחד לעניני יהודים. המשרה בוטלה, ומ-1777 שימשו יהודים כממונים: יעקב רודריגז פריירא - על יוצאי ספרד ופורטוגאל, משה אליעזר ליפמן קאלמר - על יוצאי גרמניה וישראל שלום - על יהודי אוויניון. ה\"גרמנים\" ישבו בשכונות הדלות סנט-מארטן וסנט-דני, האחרים באמידות מסוג סנט-ג'רמן וסנט-אנדריי. יהודים רבים עסקו ברוכלות ובמכירת בגדים משומשים. המבוססים יותר היו מלווים בריבית, ספקי סוסים לצבא וסוחרי תכשיטים. היו גם עובדי חריתה וריקמה.\n\nאכסניות לאוכל כשר נפתחו ב-1721 ושימשו גם כ\"מניינים\" חשאיים. בית-כנסת ראשון לא נפתח אלא ב- 1788. ערב המהפיכה לא ישבו בפריס יותר מ-500 יהודים. ב-26 באוגוסט 1789 הגישו עצומה לאסיפה המכוננת וביקשו זכויות-אזרח; ב-28 בינואר 1790 הוענקו זכויות אלה ל\"יהודים הצרפתיים\" יוצאי ספרד, פורטוגאל ואוויניון.\n\nב-1809 כבר מנה היישוב היהודי בפריס יותר מ-2,900 איש וכעבור עשר שנים 6,000 - 7,000. אז ניגשה הקונסיסטוריה לבניית בית-הכנסת הגדול, והקימה את בית-ספר היסודי הראשון. ב-1859 הועתק ממץ בית-המדרש לרבנים ובשנה שלאחריה נוסדה בפריס חברת \"כל ישראל חברים\".\n\nב-1869 נרשמו בפריס כ-30,000 תושבים יהודיים (כ-%40 מכלל היישוב היהודי בצרפת), רובם יוצאי אלזאס, לוריין וגרמניה, וכמה מאות יוצאי פולין. מעטים מאד היו עתירי-הון; הרוב המכריע השתייך למעמד הבינוני הנמוך. בקרב הנוער היהודי טיפחו את אהבת העבודה, וחלה גם עלייה מתמדת במספר היהודים בעלי מקצועות חופשיים - מורים באקדמיה, עורכי-דין ורופאים.\n\nבתחילת שנות ה-80 של המאה ה- 19 הגיעו לפריס פליטים מרוסיה ומן האזורים הסלאביים של אוסטריה ורומניה, וחל גידול ניכר בקרב עובדי-כפיים יהודים בעיר. עם זאת גברה גם ההסתה האנטישמית, שהגיעה לשיאה בפרשת דרייפוס (משנת 1894).\n\nעם הפרדת הדת מן המדינה ב-1905 נעשתה הקונסיסטוריה היהודית בפריס ארגון דתי פרטי; ועדיין הייתה בשליטת יוצאי אלזאס ולוריין, מיעוט בין יהודי פריס, והמוני המהגרים החדשים הסתייגו ממנה. מבין המהגרים החדשים יצאו 13,000 \"היהודים הזרים\" ששירתו בשורות הצבא הצרפתי במלחמת-העולם הראשונה (1914 - 1918).\n\nאחרי המלחמה התחילה הגירה יהודית לפריס מצפון-אפריקה, מטורקיה, מארצות הבלקן ובעיקר ממזרח-אירופה.\n\nבשנת 1939 ישבו בפריס 150,000 יהודים, רובם היו דוברי יידיש, והיו יותר ממחצית היישוב היהודי בצרפת כולה. ריכוזים יהודיים היו באזורים הצפוניים והמזרחיים של העיר. היהודים היו מאורגנים ביותר מ-150 \"לאנדסמאנשאפט\" (ארגונים של יוצאי קהילות שונות) ובאגודות מאגודות שונות, ואילו הקונסיסטוריה של פריס מנתה רק 6,000 חברים רשומים. מבתי-הספר היהודיים הישנים שרד רק אחד, אבל לצידו התקיימה רשת חינוך דתי בבתי-הכנסת וב\"מניינים\", בית-ספר תיכון פרטי ואפילו כמה תיכונים ממשלתיים. לעיתונות היהודית בצרפתית נוספה עתונות גם ביידיש.\n\nבין האישים המובילים בקהילת יהודי פריס היו חתני פרס נובל רנה קאסן וא' לבוב. באמנות הציור והפיסול תפסו יהודים מקום בולט, במיוחד באסכולה הפריסאית בין שתי מלחמות- העולם.\n\nערב מלחמת העולם השנייה (ספטמבר 1939) ישבו בפריס למעלה מ- 150,000 יהודים.\n\n\nתקופת השואה\n\nב-14 ביוני 1940 נכנס הצבא הגרמני לפריס. רבים מתושבי העיר נמלטו, אבל חזרו תוך שבועות אחדים. בין היהודים היו רבים שהעדיפו להשאר בצרפת הבלתי-כבושה, היו שהרחיקו לארצות-הברית (דוגמת הסופר אנדריי מורואה) והיו (למשל, רנה קאסן וגאסטון פאלבסקי) שהצטרפו לתנועת צרפת החופשית של דה גול בלונדון.\n\nיהודי פאריס היו מראשוני הפעילים בתנועות המחתרת; פראנסיס כהן, סוזאן דג'יאן וברנרד קירשן היו ממארגני מצעד הסטודנטים ב-11 בנובמבר 1940, הפגנת המחאה הראשונה נגד הגרמנים בפריס.\n\nבאמצע מאי 1941 גורשו מפריס ראשוני \"היהודים הזרים\", כ- 5,000 איש, ושולחו למחנות ריכוז והשמדה. באוגוסט שולחו עוד 8,000, ובדצמבר גורשו כמאה אנשי-רוח יהודים. ב-16 ביולי 1942 נתפסו בעיר, בשיתוף פעולה בין הכובשים הגרמנים לבין הז'נדרמריה הצרפתית, 12,884 יהודים (ביניהם כ-4,000 ילדים).\n\nמצרפת כולה הובלו למחנות-ההשמדה במזרח 85,000 יהודים, יותר ממחציתם היו תושבי פריס. בליל 3 באוקטובר 1941 הותקפו שבעה בתי-כנסת בעיר בידי פאשיסטים צרפתיים בחומרי-נפץ שקיבלו ממשטרת הבטחון הגרמנית.\n\nבעת ההתקוממות בפריס באוגוסט 1944 נפלו עשרות יהודים בקרבות. רחובות רבים בעיר ובפרבריה נקראים על שמות גיבורי המחתרת, וב-1956 הוקמה בלב פריס יד-זכרון לחללי השואה, במסגרת המרכז לתיעוד יהודי זמננו.\n\n\nעל פי מפקד 1968 מנתה אוכלוסיית פריס 2,590,770; ובאותה השנה נאמד מספר תושביה היהודים ב-350,000-300,000 - כ%60 מכלל היישוב היהודי בצרפת. עלייתם הכלכלית והחברתית של בני הדור השני של המהגרים היהודים ממזרח-אירופה, נהירת יהודים מצפון- אפריקה והקמת מפעלי בינוי חדשים; כל אלה גרמו לפיזור האוכלוסייה היהודית בבירה מפרבריה המזרחיים לאזורים אחרים בעיר. המרכזים הישנים התמלאו ביהודים צפון-אפריקנים דלי-אמצעים, ובשנים 1966-1957 גדל מספר העדות היהודיות באיזור פריס מ-44 ל-148.\n\nעל חיי הדת בקהילה ממונה רשמית הקונסיסטוריה של פריס, בנשיאותו המסורתית של אחד הרוטשילדים. הקונסיסטוריה איגדה כ-20 בתי-כנסת ו\"מניינים\", אשכנזיים וספרדיים. מלבד אלה היו כ-30 בתי-כנסת של חרדים, רפורמיים וקבוצות עצמאיות, אולם רק כשליש מיהודי פריס קיימו קשר עם מוסדות הקהילה למיניהם.\n\nיותר ממאה אלף פליטים מצפון-אפריקה נעזרו בידי ארגון מיוחד הפועל בשיתוף עם גורמים ממשלתיים ומוסדות חברה וחינוך יהודיים. פעולות תרבות וחינוך פעלו להגברת התודעה היהודית בקרב הנוער הלומד; ופריס הייתה אחת הערים היחידות בעולם שקיימה בית-ספר עברי, שלו תכנית לימודים ישראלית לכל דבר.\n\nמלחמת ששת הימים הוציאה אלפי צעירים להפגנות הזדהות עם ישראל; וגם ב\"מרד הסטודנטים\" (1968) בלטו יהודים, והיו חברים יהודים בקבוצות השמאל החדש שתמכו בטרור הערבי. המתיחות הביאה לחיכוכים בין ערבים ליהודים יוצאי צפון-אפריקה והתארגנו קבוצות יהודיות להגנה עצמית.\n\nבשנת 1997 חיו בצרפת כולה כ- 600,000 יהודים; למעלה ממחציתם (כ- 350,000) ישבו בפריס רבתי. \"המועצה של יהודי צרפת\"(CRIF) שהוקמה בשנת 1944 מייצגת את הקהילות היהודיות כלפי השלטונות, והקונסיסטוריה אחראית לפעילות היהודית הדתית. כל הארגונים הציוניים פועלים בעיר וכן כעשרים בתי ספר יהודיים, עממיים ותיכונים. וכמספר הזה בתי כנסת."
-    },
-    "UnitText2": {
-      "En": null,
-      "He": null
-    },
-    "UnitPlaces": [],
-    "main_image_url": "https://storage.googleapis.com/bhs-flat-pics/5A8D1CC0-3D01-4AB0-B515-4B27873703D8.jpg",
-    "UnitStatus": 3,
-    "UnitHeaderDMSoundex": {
-      "En": "ZZ E794000 ZZ ",
-      "He": "ZZ H794000 ZZ "
-    },
-    "UnitDisplayStatus": 2,
-    "RightsCode": 1,
-    "UnitId": 72312,
-    "IsValueUnit": true,
-    "StatusDesc": "Completed",
-    "DisplayStatusDesc": "Museum only",
-    "PlaceParentTypeCodeDesc": {
-      "En": "Country"
-    },
-    "PlaceParentId": 66873,
-    "UserLexicon": null,
-    "Attachments": [],
-    "Slug": {
-      "En": "place_paris",
-      "He": "מקום_פריס"
-    },
-    "Header": {
-      "En": "PARIS",
-      "He": "פריס"
-    },
-    "ForPreview": false,
-    "_id": "571607a576f1023786eada44"
-  }
-]

Generated by aglio on 29 Dec 2016

\ No newline at end of file diff --git a/migration/tasks.py b/migration/tasks.py index 11d4a35..da4889a 100644 --- a/migration/tasks.py +++ b/migration/tasks.py @@ -221,13 +221,17 @@ def update_doc(collection, document): tree_num, i, id)} - update_collection(collection, query, document) + created = update_collection(collection, query, document) + if MIGRATE_ES == '1': + is_ok, msg = update_es(collection.name, document, created) + if not is_ok: + current_app.logger.error(msg) current_app.logger.info('Updated person: {}.{}' .format(tree_num, id)) else: doc_id = get_doc_id(collection.name, document) if doc_id: - query = {'_id': doc_id} + query = {get_collection_id_field(collection): doc_id} created = update_collection(collection, query, document) if MIGRATE_ES == '1': is_ok, msg = update_es(collection.name, document, created) diff --git a/scripts/copy_slugs.py b/scripts/copy_slugs.py index 1fad497..c292b75 100755 --- a/scripts/copy_slugs.py +++ b/scripts/copy_slugs.py @@ -25,36 +25,38 @@ def parse_args(): for c_name in SEARCHABLE_COLLECTIONS: - print("starting work on " + c_name) - # in the process we might create duplicate index so remove them for now - try: - todb[c_name].drop_index('Slug.He_1') - except pymongo.errors.OperationFailure: - pass - try: - todb[c_name].drop_index('Slug.En_1') - except pymongo.errors.OperationFailure: - pass - id_field = get_collection_id_field(c_name) - # loop on all docs with a slug - for from_doc in fromdb[c_name].find({'Slug': {'$exists': True, - '$ne': {}}}): - to_doc = app.data_db[c_name].find_one( - {id_field: from_doc[id_field]}) - if not to_doc: - print("missing {}".format(get_item_slug(from_doc))) - continue - if from_doc['Slug'] != to_doc['Slug']: - try: - todb[c_name].update_one({'_id': to_doc['_id']}, - {'$set': - {'Slug': from_doc['Slug']} - }) - except pymongo.errors.DuplicateKeyError as e: - import pdb; pdb.set_trace() - print('changed {} to {}' - .format(get_item_slug(to_doc).encode('utf8'), - get_item_slug(from_doc).encode('utf8'))) - todb[c_name].create_index("Slug.He", unique=True, sparse=True) - todb[c_name].create_index("Slug.En", unique=True, sparse=True) + if c_name != "persons": + # TODO: add support for persons, at the moment it's not working due to the persons not having a single unique id field + print("starting work on " + c_name) + # in the process we might create duplicate index so remove them for now + try: + todb[c_name].drop_index('Slug.He_1') + except pymongo.errors.OperationFailure: + pass + try: + todb[c_name].drop_index('Slug.En_1') + except pymongo.errors.OperationFailure: + pass + id_field = get_collection_id_field(c_name) + # loop on all docs with a slug + for from_doc in fromdb[c_name].find({'Slug': {'$exists': True, + '$ne': {}}}): + to_doc = app.data_db[c_name].find_one( + {id_field: from_doc[id_field]}) + if not to_doc: + print("missing {}".format(get_item_slug(from_doc))) + continue + if from_doc['Slug'] != to_doc['Slug']: + try: + todb[c_name].update_one({'_id': to_doc['_id']}, + {'$set': + {'Slug': from_doc['Slug']} + }) + except pymongo.errors.DuplicateKeyError as e: + import pdb; pdb.set_trace() + print('changed {} to {}' + .format(get_item_slug(to_doc).encode('utf8'), + get_item_slug(from_doc).encode('utf8'))) + todb[c_name].create_index("Slug.He", unique=True, sparse=True) + todb[c_name].create_index("Slug.En", unique=True, sparse=True) diff --git a/scripts/elasticsearch_create_index.py b/scripts/elasticsearch_create_index.py index 639b902..55d7d0a 100755 --- a/scripts/elasticsearch_create_index.py +++ b/scripts/elasticsearch_create_index.py @@ -63,7 +63,23 @@ def _get_index_body(self): }] } for collection_name, mapping in body["mappings"].items(): - mapping["properties"][get_collection_id_field(collection_name, is_elasticsearch=True)] = {"type": "keyword"} + if collection_name == "persons": + # persons specific mappings + # ensure all fields relevant for search are properly indexed + mapping["properties"].update({"tree_num": {"type": "integer"}, + "tree_version": {"type": "integer"}, + "person_id": {"type": "keyword"}, + "birth_year": {"type": "integer"}, + "death_year": {"type": "integer"}, + "marriage_years": {"type": "integer"}, + "first_name_lc": {"type": "text"}, + "last_name_lc": {"type": "text"}, + "BIRT_PLAC_lc": {"type": "text"}, + "MARR_PLAC_lc": {"type": "text"}, + "DEAT_PLAC_lc": {"type": "text"}, + "gender": {"type": "keyword"}}) + else: + mapping["properties"][get_collection_id_field(collection_name)] = {"type": "keyword"} return body def create_es_index(self, es, es_index_name, delete_existing=False): diff --git a/scripts/ensure_required_metadata.py b/scripts/ensure_required_metadata.py index fd2aeba..cdc2de9 100755 --- a/scripts/ensure_required_metadata.py +++ b/scripts/ensure_required_metadata.py @@ -32,6 +32,7 @@ def _parse_args(self): parser.add_argument('--debug', action="store_true", help="show more debug logs") parser.add_argument('--legacy', action="store_true", help="sync with legacy collections as well (for development/testing purposes only)") parser.add_argument('--limit', type=int, help="process up to LIMIT results - good for development / testing") + parser.add_argument('--index', help="use this Elasticsearch index instead of the index from configuration") return parser.parse_args() def _debug(self, msg): @@ -41,15 +42,30 @@ def _debug(self, msg): def _info(self, msg): print(msg) + def _get_item_header_updates(self, collection_name, mongo_item, es_item): + updates = {} + if collection_name == "persons": + name = " ".join(mongo_item["name"]) if isinstance(mongo_item["name"], list) else mongo_item["name"] + item_header = {"En": name, "He": name} + if es_item.get("Header", {}) != item_header: + updates["Header"] = item_header + return updates + + def _get_item_log_identifier(self, item_key, collection_name): + if collection_name == "persons": + return "(tree_num,version,id={},{},{})".format(*item_key) + else: + return "{}={}".format(get_collection_id_field(collection_name), item_key) + def _ensure_correct_item_required_metadata(self, item_key, mongo_item, collection_name, es_item): - elasticsearch_id_field = get_collection_id_field(collection_name, is_elasticsearch=True) updates = {} - if es_item["_source"].get("Slug") != mongo_item.get("Slug"): + if es_item.get("Slug") != mongo_item.get("Slug"): updates["Slug"] = mongo_item.get("Slug") - if es_item["_source"].get("geometry") != mongo_item.get("geometry"): + if es_item.get("geometry") != mongo_item.get("geometry"): updates["geometry"] = mongo_item.get("geometry") + updates.update(self._get_item_header_updates(collection_name, mongo_item, es_item)) src_show = doc_show_filter(collection_name, mongo_item) - es_show = doc_show_filter(collection_name, es_item["_source"]) + es_show = doc_show_filter(collection_name, es_item) if es_show != src_show: if not src_show: raise Exception("should not ensure metadata if mongo item should not be shown") @@ -58,95 +74,129 @@ def _ensure_correct_item_required_metadata(self, item_key, mongo_item, collectio # need to copy the relevant metadata for deciding whether to show the item updates.update(get_show_metadata(collection_name, mongo_item)) if len(updates) > 0: - self.app.es.update(index=self.app.es_data_db_index_name, doc_type=collection_name, - id=es_item["_id"], body={"doc": updates}) - return self.UPDATED_METADATA, "updated {} keys in elasticsearch ({}={})".format(len(updates), elasticsearch_id_field, item_key) + self.app.es.update(index=self._get_elasticsearch_index_name(), + doc_type=collection_name, + id=self._get_elasticsearch_doc_id_from_item_key(collection_name, item_key), + body={"doc": updates}) + return self.UPDATED_METADATA, "updated {} keys in elasticsearch ({})".format(len(updates), self._get_item_log_identifier(item_key, collection_name)) else: - return self.NO_UPDATE_NEEDED, "item has correct metadata, no update needed: ({}={})".format(elasticsearch_id_field, item_key) + return self.NO_UPDATE_NEEDED, "item has correct metadata, no update needed: ({})".format(self._get_item_log_identifier(item_key, collection_name)) def _add_item(self, item_key, mongo_item, collection_name, es_item): - elasticsearch_id_field = get_collection_id_field(collection_name, is_elasticsearch=True) - is_ok, msg = update_es(collection_name, mongo_item, is_new=True, app=self.app) + is_ok, msg = update_es(collection_name, mongo_item, is_new=True, app=self.app, es_index_name=self._get_elasticsearch_index_name()) if is_ok: self._debug(msg) - return self.ADDED_ITEM, "added item to es: ({}={})".format(elasticsearch_id_field, item_key) + return self.ADDED_ITEM, "added item to es: ({})".format(self._get_item_log_identifier(item_key, collection_name)) else: - return self.ERROR, "error adding item ({}={}): {}".format(elasticsearch_id_field, item_key, msg) + return self.ERROR, "error adding item ({}): {}".format(self._get_item_log_identifier(item_key, collection_name), msg) def _del_item(self, item_key, mongo_item, collection_name, es_item): - elasticsearch_id_field = get_collection_id_field(collection_name, is_elasticsearch=True) - self.app.es.delete(index=self.app.es_data_db_index_name, doc_type=collection_name, id=es_item["_id"]) - return self.DELETED_ITEM, "deleted item: ({}={})".format(elasticsearch_id_field, item_key) + self.app.es.delete(index=self._get_elasticsearch_index_name(), doc_type=collection_name, id=self._get_elasticsearch_doc_id_from_item_key(collection_name, item_key)) + return self.DELETED_ITEM, "deleted item: ({})".format(self._get_item_log_identifier(item_key, collection_name)) def _update_item(self, item_key, show_item, exists_in_elasticsearch, mongo_item, collection_name, es_item): - elasticsearch_id_field = get_collection_id_field(collection_name, is_elasticsearch=True) if show_item: if exists_in_elasticsearch: return self._ensure_correct_item_required_metadata(item_key, mongo_item, collection_name, es_item) elif self.args.add: return self._add_item(item_key, mongo_item, collection_name, es_item) else: - return self.ERROR, "could not find item in elasticsearch ({}={})".format(elasticsearch_id_field, item_key) + return self.ERROR, "could not find item in elasticsearch ({})".format(self._get_item_log_identifier(item_key, collection_name)) else: # item should not be shown if exists_in_elasticsearch: return self._del_item(item_key, mongo_item, collection_name, es_item) else: - return self.NO_UPDATE_NEEDED, "item should not be shown and doesn't exist in ES - no action needed ({}={})".format(elasticsearch_id_field, item_key) + return self.NO_UPDATE_NEEDED, "item should not be shown and doesn't exist in ES - no action needed ({})".format(self._get_item_log_identifier(item_key, collection_name)) + + def _get_mongo_item_key(self, collection_name, mongo_item): + if collection_name == "persons": + person_id = mongo_item.get("id", None) + if self.args.legacy and not person_id: + person_id = mongo_item.get("ID", None) + tree_num = mongo_item.get("tree_num", None) + tree_version = mongo_item.get("tree_version", None) + if person_id is not None and tree_num is not None and tree_version is not None: + item_key = int(tree_num), int(tree_version), str(person_id) + else: + item_key = None + else: + id_field = get_collection_id_field(collection_name) + item_key = mongo_item.get(id_field, None) + return item_key + + def _get_elasticsearch_item_key(self, collection_name, es_item): + if collection_name == "persons": + person_id = es_item.get("person_id", None) + tree_num = es_item.get("tree_num", None) + tree_version = es_item.get("tree_version", None) + if person_id is not None and tree_num is not None and tree_version is not None: + item_key = int(tree_num), int(tree_version), str(person_id) + else: + item_key = None + else: + id_field = get_collection_id_field(collection_name) + item_key = es_item.get(id_field, None) + return item_key + + def _get_elasticsearch_doc_id_from_item_key(self, collection_name, item_key): + if collection_name == "persons": + return "{}_{}_{}".format(*item_key) + else: + return item_key + + def _get_elasticsearch_item_key_query(self, collection_name, item_key): + if collection_name == "persons": + tree_num, tree_version, person_id = item_key + return {"bool": {"must": [{"term": {"tree_num": tree_num}}, + {"term": {"tree_version": tree_version}}, + {"term": {"person_id": person_id}}]}} + else: + return {"term": {get_collection_id_field(collection_name): item_key}} def _process_mongo_item(self, collection_name, mongo_item): """ process and update a single mongo item returns tuple (code, msg, processed_key) """ - # the name of the field which stores the key for this item - # it is different - mongo_id_field = get_collection_id_field(collection_name, is_elasticsearch=False) - elasticsearch_id_field = get_collection_id_field(collection_name, is_elasticsearch=True) - item_key = mongo_item.get(mongo_id_field, None) # the current item's key (AKA id) - if self.args.legacy and not item_key and collection_name == "persons": - item_key = mongo_item.get("ID", None) + item_key = self._get_mongo_item_key(collection_name, mongo_item) if item_key: - self._debug("processing mongo item {}".format(item_key)) + self._debug("processing mongo item ({})".format(self._get_item_log_identifier(item_key, collection_name))) show_item = doc_show_filter(collection_name, mongo_item) # should this item be shown or not? - # search for corresponding items in elasticsearch - based on the item's collection and key - # we don't rely on elasticsearch natural id field because we want to support legacy elasticsearch documents - # also, to prevent duplicates - body = {"query": {"term": {elasticsearch_id_field: item_key}}} + body = {"query": self._get_elasticsearch_item_key_query(collection_name, item_key)} try: - res = self.app.es.search(index=self.app.es_data_db_index_name, doc_type=collection_name, body=body) - except Exception, e: - self._info("exception processing mongo item from collection {} ({}={}): {}".format(collection_name, mongo_id_field, item_key, str(e))) + res = self.app.es.search(index=self._get_elasticsearch_index_name(), doc_type=collection_name, body=body) + except Exception as e: + self._info("exception processing mongo item from collection {} ({}): {}".format(collection_name, self._get_item_log_identifier(item_key, collection_name), str(e))) res = {} # raise hits = res.get("hits", {}).get("hits", []) if len(hits) > 1: - raise Exception("more then 1 hit for item {}={}".format(mongo_id_field, item_key)) + raise Exception("more then 1 hit for item ({})".format(self._get_item_log_identifier(item_key, collection_name))) elif len(hits) == 1: - es_item = hits[0] + es_item = hits[0]["_source"] else: es_item = None try: return self._update_item(item_key, show_item, len(hits) > 0, mongo_item, collection_name, es_item) + (item_key,) - except Exception, e: + except Exception as e: if self.args.debug: print_exc() - return self.ERROR, "error while processing mongo item {} ({}={}): {}".format(collection_name, mongo_id_field, item_key, e), None + return self.ERROR, "error while processing mongo item {} ({}): {}".format(collection_name, self._get_item_log_identifier(item_key, collection_name), e), None else: - raise Exception("invalid mongo item key for collection {} mongo_id_field {}: {}".format(collection_name, mongo_id_field, mongo_item)) + raise Exception("invalid mongo item key for collection {}, mongo item: {}".format(collection_name, mongo_item)) - def _process_elasticsearch_item(self, collection_name, item, processed_mongo_keys): - id_field = get_collection_id_field(collection_name, is_elasticsearch=True) # the name of the field which stores the key for this item - item_key = item.get("_source", {}).get(id_field, None) # the current item's key (AKA id) + def _process_elasticsearch_item(self, collection_name, es_item, processed_mongo_item_keys): + item_key = self._get_elasticsearch_item_key(collection_name, es_item["_source"]) if item_key: - self._debug("processing elasticsearch item {}".format(item_key)) - if item_key in processed_mongo_keys: + self._debug("processing elasticsearch item ({})".format(self._get_item_log_identifier(item_key, collection_name))) + if item_key in processed_mongo_item_keys: return self.NO_UPDATE_NEEDED, "elasticsearch item exists in mongo - it would have been updated from mongo side", item_key else: - self.app.es.delete(index=self.app.es_data_db_index_name, doc_type=collection_name, id = item["_id"]) + self.app.es.delete(index=self._get_elasticsearch_index_name(), doc_type=collection_name, id=self._get_elasticsearch_doc_id_from_item_key(collection_name, item_key)) return self.DELETED_ITEM, "deleted an item which exists in elastic but not in mongo", item_key else: - raise Exception("invalid elasticsearch item key") + raise Exception("invalid elasticsearch item key for collection {}, elasticsearch item: {}".format(collection_name, es_item)) def _handle_process_item_results(self, num_actions, errors, results, collection_name): """ @@ -170,10 +220,6 @@ def _handle_process_item_results(self, num_actions, errors, results, collection_ sys.stdout.flush() return None - def _filter_legacy_mongo_genTreeIndividuals_items(self, items): - for item in items: - yield item - def _limit(self, items): if self.args.limit: return islice(items, 0, self.args.limit) @@ -181,9 +227,14 @@ def _limit(self, items): return items def _get_mongo_items(self, collection_name, key): - items = self._limit(self.app.data_db[collection_name].find(*[{get_collection_id_field(collection_name): key}] if key else [])) - if collection_name == "genTreeIndividuals": - items = self._limit(self._filter_legacy_mongo_genTreeIndividuals_items(items)) + if key: + if collection_name == "persons": + raise NotImplementedError("persons does not support updating by key yet") + else: + items = self.app.data_db[collection_name].find({get_collection_id_field(collection_name): key}) + else: + items = self.app.data_db[collection_name].find() + items = self._limit(items) return items def _process_mongo_items(self, collection_name, errors, key, num_actions, processed_keys): @@ -206,8 +257,14 @@ def _process_mongo_items(self, collection_name, errors, key, num_actions, proces def _process_elasticsearch_items(self, collection_name, errors, key, num_actions, processed_mongo_keys, processed_elasticsearch_keys): num_processed_keys = 0 - items = elasticsearch.helpers.scan(self.app.es, index=self.app.es_data_db_index_name, doc_type=collection_name, scroll=u"3h", - query={"query": {"match": {get_collection_id_field(collection_name, is_elasticsearch=True): key}}} if key else None) + if key: + if collection_name == "persons": + raise NotImplementedError("no support for updating specific persons") + else: + body = {"query": self._get_elasticsearch_item_key_query(collection_name, key)} + items = elasticsearch.helpers.scan(self.app.es, index=self._get_elasticsearch_index_name(), doc_type=collection_name, scroll=u"3h", query=body) + else: + items = elasticsearch.helpers.scan(self.app.es, index=self._get_elasticsearch_index_name(), doc_type=collection_name, scroll=u"3h") items = self._limit(items) for item in items: processed_key = self._handle_process_item_results(num_actions, errors, self._process_elasticsearch_item(collection_name, item, processed_mongo_keys), collection_name) @@ -220,6 +277,11 @@ def _process_elasticsearch_items(self, collection_name, errors, key, num_actions self._info("processed {} elasticsearch items".format(num_processed_keys)) return num_processed_keys + def _get_elasticsearch_index_name(self): + if self.args.index: + return self.args.index + else: + return self.app.es_data_db_index_name def _process_collection(self, collection_name, key): self._info("processing collection {}{}".format(collection_name, " key {}".format(key) if key else "")) @@ -231,7 +293,7 @@ def _process_collection(self, collection_name, key): self._info("{} errors (see error.log for details)".format(len(errors))) with open("error.log", "a") as f: f.write("===== {}: {}: {} errors =====\n".format(datetime.now().strftime(""), - collection_name, len(errors))) + collection_name, len(errors))) for err in errors: f.write("{}\n".format(err)) self._debug(err) diff --git a/scripts/make_docs.sh b/scripts/make_docs.sh new file mode 100755 index 0000000..4ad67b0 --- /dev/null +++ b/scripts/make_docs.sh @@ -0,0 +1,9 @@ +#!/usr/bin/env bash + +if which aglio; then + aglio -i docs/_sources/index.apib -o docs/_build/index.html $* +else + echo "aglio is required to make the docs, please install it" + echo " npm install -g aglio" + exit 1 +fi diff --git a/tests/conftest.py b/tests/conftest.py index d734805..27abeba 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -95,6 +95,7 @@ def mock_db(): 'tree_num': 1, 'tree_version': 0, 'id': 'I2', + "name": ["hoomy", "cookie"], 'StatusDesc': 'Completed', 'RightsDesc': 'Full', 'DisplayStatusDesc': 'free', @@ -106,8 +107,10 @@ def mock_db(): 'tree_num': 1, 'tree_version': 0, 'id': 'I3', + "name": ["rookie", "bloopy"], 'Slug': {'En': 'person_1;0.I3'}, - "deceased": True + "deceased": True, + "BIRT_PLAC": "London" }) places = db.create_collection('places') places.insert({'Slug': {'En': 'place_some'}, diff --git a/tests/test_migration.py b/tests/test_migration.py index d7a35d7..9862cdb 100644 --- a/tests/test_migration.py +++ b/tests/test_migration.py @@ -46,7 +46,8 @@ def _parse_args(self): "debug": True, "add": True, "limit": None, - "legacy": False}) + "legacy": False, + "index": None}) def given_ensure_required_metadata_ran(app): @@ -69,60 +70,53 @@ def test_update_doc(mocker, app): mocker.patch('elasticsearch.Elasticsearch.index') collection = app.data_db['personalities'] with app.app_context(): - # make sure the collection is clean - doc = collection.find_one({'UnitId':1000}) - assert not doc - r=update_doc(collection, THE_TESTER) + # make sure the document does not exist in mongo + assert not collection.find_one({'UnitId':1000}) + # this will create the document in mongo + update_doc(collection, deepcopy(THE_TESTER)) doc = collection.find_one({'UnitId':1000}) assert doc['UnitText1']['En'] == 'The Tester' - assert doc['_id'] == 1000 - expected_body = deepcopy(THE_TESTER) - del expected_body["_id"] - expected_body["Header"]["He"] = "_" - elasticsearch.Elasticsearch.index.assert_called_once_with( - body = expected_body, - doc_type = 'personalities', - id=doc['_id'], - index = 'bhdata', - ) - assert doc['related'] == ['place_some'] + assert doc["UnitId"] == 1000 + # check in elasticsearch + expected_elasticsearch_body = dict(deepcopy(THE_TESTER), + Header={"En": "Nik Nikos", "He": "_"}, + Slug={"En": "luminary_nik-nikos"}, + related=["place_some"]) + elasticsearch.Elasticsearch.index.assert_called_once_with(body=expected_elasticsearch_body, + doc_type='personalities', + id=1000, + index='bhdata',) def test_updated_doc(mocker, app): ''' testing a creation and an update, ensuring uniquness ''' mocker.patch('elasticsearch.Elasticsearch.index') + mocker.patch('elasticsearch.Elasticsearch.update') collection = app.data_db['personalities'] with app.app_context(): - update_doc(collection, deepcopy(THE_TESTER)) - slug = collection.find_one({'UnitId':1000})['Slug']['En'] - assert slug == collection.find_one({'UnitId':1000})['Slug']['En'] - id = THE_TESTER['_id'] - expected_body = deepcopy(THE_TESTER) - del expected_body["_id"] - expected_body["Header"]["He"] = "_" - # no hebrew slug - expected_body["Slug"] = {"En": expected_body["Slug"]["En"]} + the_tester = deepcopy(THE_TESTER) + update_doc(collection, the_tester) + assert collection.find_one({'UnitId':1000})['Slug']['En'] == "luminary_nik-nikos" elasticsearch.Elasticsearch.index.assert_called_once_with( - body = expected_body, - doc_type = "personalities", - id=id, - index = "bhdata", + index="bhdata", doc_type="personalities", id=1000, + body = dict(deepcopy(THE_TESTER), + Header={"En": "Nik Nikos", "He": "_"}, + Slug={"En": "luminary_nik-nikos"}, + related=["place_some"]) ) - elasticsearch.Elasticsearch.index.reset_mock() - updated_tester = deepcopy(THE_TESTER) + updated_tester = deepcopy(the_tester) updated_tester['Header']['En'] = 'Nikos Nikolveich' updated_tester['UnitText1']['En'] = 'The Great Tester' update_doc(collection, updated_tester) - assert collection.count({'UnitId':1000}) == 1 - expected_body = deepcopy(updated_tester) - del expected_body['_id'] - expected_body["Header"] = {"En": "Nikos Nikolveich"} - elasticsearch.Elasticsearch.index.assert_called_once_with( - body = expected_body, - doc_type = 'personalities', - id=id, - index = 'bhdata', + elasticsearch.Elasticsearch.update.assert_called_once_with( + index = 'bhdata', doc_type = 'personalities', id = 1000, + body = dict(deepcopy(THE_TESTER), + Header={"En": "Nikos Nikolveich", "He": "_"}, + Slug={"En": "luminary_nik-nikos"}, + related=["place_some"], + UnitText1={"En": "The Great Tester"}) ) + def test_update_photo(mocker): mocker.patch('boto.storage_uri') mocker.patch('boto.storage_uri') @@ -209,9 +203,9 @@ def test_ensure_metadata(app, mock_db): assert es_search(app, "personalities", "UnitId:1") == [] assert es_search(app, "personalities", "UnitId:2") == [] assert es_search(app, "places", "UnitId:3") == [] - assert es_search(app, "persons", "PID:I2") == [] # living person (in mongo) - assert es_search(app, "persons", "PID:I3") == [] # dead person (in mongo) - assert [h["PID"] for h in es_search(app, "persons", "PID:I687")] == ["I687"] # living person in ES + assert es_search(app, "persons", "person_id:I2") == [] # living person (in mongo) + assert es_search(app, "persons", "person_id:I3") == [] # dead person (in mongo) + assert [h["person_id"] for h in es_search(app, "persons", "person_id:I687")] == ["I687"] # living person in ES assert set(given_ensure_required_metadata_ran(app)) == {('places', 'ADDED_ITEM', 3), ('places', 'DELETED_ITEM', 71255), ('places', 'DELETED_ITEM', 71236), @@ -225,18 +219,18 @@ def test_ensure_metadata(app, mock_db): ('personalities', 'DELETED_ITEM', 93968), ('movies', 'DELETED_ITEM', 111554), ('movies', 'DELETED_ITEM', 111553), - ('persons', 'NO_UPDATE_NEEDED', 'I2'), - ('persons', 'ADDED_ITEM', 'I3'), - ('persons', 'DELETED_ITEM', u'I687'), - ('persons', 'DELETED_ITEM', u'I686')} + ('persons', 'NO_UPDATE_NEEDED', (1, 0, 'I2')), + ('persons', 'ADDED_ITEM', (1, 0, 'I3')), + ('persons', 'DELETED_ITEM', (1933, 0, 'I687')), + ('persons', 'DELETED_ITEM', (1196, 0, 'I686'))} # running again - to make sure it searches items properly in ES # items deleted in previous results - don't appear now # items added / no update needed in previous results - all have no_update_needed now assert set(given_ensure_required_metadata_ran(app)) == {('places', 'NO_UPDATE_NEEDED', 3), ('personalities', 'NO_UPDATE_NEEDED', 1), ('personalities', 'NO_UPDATE_NEEDED', 2), - ('persons', 'NO_UPDATE_NEEDED', 'I2'), - ('persons', 'NO_UPDATE_NEEDED', 'I3')} + ('persons', 'NO_UPDATE_NEEDED', (1, 0, 'I2')), + ('persons', 'NO_UPDATE_NEEDED', (1, 0, 'I3'))} # new item in mongo - added to ES (because add parameter is enabled in these tests) assert es_search(app, "personalities", "UnitId:1") == [{u'DisplayStatusDesc': u'free', u'RightsDesc': u'Full', @@ -263,8 +257,11 @@ def test_ensure_metadata(app, mock_db): given_ensure_required_metadata_ran(app) assert len(es_search(app, "places", "UnitId:3")) == 0 # dead person - added to ES - assert [h["PID"] for h in es_search(app, "persons", "PID:I3")] == ["I3"] + assert [h["person_id"] for h in es_search(app, "persons", "person_id:I3")] == ["I3"] # living person in mongo - not synced to ES - assert [h["PID"] for h in es_search(app, "persons", "PID:I2")] == [] + assert [h["person_id"] for h in es_search(app, "persons", "person_id:I2")] == [] # living person in ES - deleted - assert [h["PID"] for h in es_search(app, "persons", "PID:I687")] == [] + assert [h["person_id"] for h in es_search(app, "persons", "person_id:I687")] == [] + # person has first_name / last_name fields (added during migration process for elasticsearch indexing) + assert [h["first_name_lc"] for h in es_search(app, "persons", "person_id:I3")] == ["deady"] + assert [h["last_name_lc"] for h in es_search(app, "persons", "person_id:I3")] == ["deadead"] diff --git a/tests/test_search.py b/tests/test_search.py index 5312961..a7fe7ea 100644 --- a/tests/test_search.py +++ b/tests/test_search.py @@ -3,6 +3,7 @@ from scripts.elasticsearch_create_index import ElasticsearchCreateIndexCommand from copy import deepcopy import os +from bhs_api.item import get_doc_id ### environment setup functions @@ -15,7 +16,11 @@ def index_doc(app, collection, doc): doc = deepcopy(doc) doc.get("Header", {}).setdefault("He_lc", doc.get("Header", {}).get("He", "").lower()) doc.get("Header", {}).setdefault("En_lc", doc.get("Header", {}).get("En", "").lower()) - app.es.index(app.es_data_db_index_name, collection, doc) + if collection == "persons": + doc_id = "{}_{}_{}".format(doc["tree_num"], doc["tree_version"], doc["person_id"]) + else: + doc_id = get_doc_id(collection, doc) + app.es.index(index=app.es_data_db_index_name, doc_type=collection, body=doc, id=doc_id) def index_docs(app, collections, reuse_db=False): if not reuse_db or not app.es.indices.exists(app.es_data_db_index_name): @@ -47,16 +52,12 @@ def given_local_elasticsearch_client_with_test_data(app, session_id=None): ### custom assertions -def assert_error_response(res, expected_status_code, expected_error): +def assert_error_response(res, expected_status_code, expected_error_startswith): assert res.status_code == expected_status_code - assert res.data == """ -{status_code} {status_msg} -

{status_msg}

-

{error}

-""".format(error=expected_error, status_code=expected_status_code, status_msg="Bad Request" if expected_status_code == 400 else "Internal Server Error") + assert res.json["error"].startswith(expected_error_startswith) def assert_common_elasticsearch_search_results(res): - assert res.status_code == 200 + assert res.status_code == 200, "invalid status, json response: {}".format(res.json) hits = res.json["hits"] shards = res.json["_shards"] assert shards["successful"] > 0 @@ -113,7 +114,7 @@ def test_search_without_parameters_should_return_error(client): def test_search_without_elasticsearch_should_return_error(client, app): given_invalid_elasticsearch_client(app) - assert_error_response(client.get('/v1/search?q=test'), 500, "Sorry, the search cluster appears to be down") + assert_error_response(client.get('/v1/search?q=test'), 500, "Error connecting to Elasticsearch") def test_searching_for_nonexistant_term_should_return_no_results(client, app): given_local_elasticsearch_client_with_test_data(app, __file__) @@ -277,7 +278,75 @@ def test_search_persons(client, app): # searching for collection persons - returns only persons results result = list(assert_search_results(client.get(u"/v1/search?q=einstein&collection=persons"), 1))[0]["_source"] assert result["name_lc"] == ["albert", "einstein"] - assert result["PID"] == "I686" + assert result["person_id"] == "I686" + +def test_advanced_search_persons(client, app): + given_local_elasticsearch_client_with_test_data(app, __file__) + is_einstein_result = lambda url: list(assert_search_results(client.get(url), 1))[0]["_source"]["name_lc"] == ["albert", "einstein"] + assert_error_message = lambda url, msg: assert_error_response(client.get(url), 500, msg) + assert PERSON_EINSTEIN["name_lc"] == ["albert", "einstein"] + + # death year params + assert PERSON_EINSTEIN["death_year"] == 1955 + assert_no_results(client.get(u"/v1/search?collection=persons&yod=1910")) + assert is_einstein_result(u"/v1/search?collection=persons&yod=1955") + assert is_einstein_result(u"/v1/search?collection=persons&yod=1953&yod_t=pmyears&yod_v=2") + assert is_einstein_result(u"/v1/search?collection=persons&yod=1957&yod_t=pmyears&yod_v=2") + assert_error_message(u"/v1/search?collection=persons&yod=foobar", "invalid value for yod (death_year): foobar") + assert_error_message(u"/v1/search?collection=persons&yod=1957&yod_t=invalid", "invalid value for yod_t (death_year): invalid") + assert_error_message(u"/v1/search?collection=persons&yod=1957&yod_t=pmyears&yod_v=foo", "invalid value for yod_v (death_year): foo") + + # birth year params + assert PERSON_EINSTEIN["birth_year"] == 1879 + assert_no_results(client.get(u"/v1/search?collection=persons&yob=1910")) + assert is_einstein_result(u"/v1/search?collection=persons&yob=1879") + assert is_einstein_result(u"/v1/search?collection=persons&yob=1877&yob_t=pmyears&yob_v=2") + assert is_einstein_result(u"/v1/search?collection=persons&yob=1881&yob_t=pmyears&yob_v=2") + assert_error_message(u"/v1/search?collection=persons&yob=foobar", "invalid value for yob (birth_year): foobar") + assert_error_message(u"/v1/search?collection=persons&yob=1877&yob_t=invalid", "invalid value for yob_t (birth_year): invalid") + assert_error_message(u"/v1/search?collection=persons&yob=1877&yob_t=pmyears&yob_v=foo", "invalid value for yob_v (birth_year): foo") + + # marriage years params + assert PERSON_EINSTEIN["marriage_years"] == [1923, 1934] + assert_no_results(client.get(u"/v1/search?collection=persons&yom=1910")) + assert is_einstein_result(u"/v1/search?collection=persons&yom=1923") + assert is_einstein_result(u"/v1/search?collection=persons&yom=1936&yom_t=pmyears&yom_v=2") + assert is_einstein_result(u"/v1/search?collection=persons&yom=1932&yom_t=pmyears&yom_v=2") + assert_error_message(u"/v1/search?collection=persons&yom=foobar", "invalid value for yom (marriage_years): foobar") + assert_error_message(u"/v1/search?collection=persons&yom=1877&yom_t=invalid", "invalid value for yom_t (marriage_years): invalid") + assert_error_message(u"/v1/search?collection=persons&yom=1877&yom_t=pmyears&yom_v=foo", "invalid value for yom_v (marriage_years): foo") + + # multiple params + assert is_einstein_result(u"/v1/search?collection=persons&yob=1877&yob=1881&yob_t=pmyears&yob_v=2&yod=1955") + assert_error_message(u"/v1/search?collection=persons&yod=123&&yob=1877&yob_t=pmyears&yob_v=foo", "invalid value for yob_v (birth_year): foo") + assert_no_results(client.get(u"/v1/search?collection=persons&yob=1879&yod=1953")) + + # text params + for param, attr, val, exact, starts, like in (("first", "first_name_lc", "albert", "albert", "alber", "alebrt"), + ("last", "last_name_lc", "einstein", "einstein", "einste", "einstien"), + ("pob", "BIRT_PLAC_lc", "ulm a.d., germany", "germany", "germ", "uml"), + ("pod", "DEAT_PLAC_lc", "princeton, u.s.a.", "princeton", "prince", "prniceton"), + ("pom", "MARR_PLAC_lc", ["uklaulaulaska", "agrogorog"], "uklaulaulaska", "agro", "agroogrog")): + assert PERSON_EINSTEIN[attr] == val + format_kwargs = {"param": param, "exact": exact, "starts": starts, "like": like} + assert_no_results(client.get(u"/v1/search?collection=persons&{param}=foobarbaz".format(**format_kwargs))) + assert is_einstein_result(u"/v1/search?collection=persons&{param}={exact}".format(**format_kwargs)) + assert_no_results(client.get(u"/v1/search?collection=persons&{param}=foobarbaz&{param}_t=exact".format(**format_kwargs))) + assert is_einstein_result(u"/v1/search?collection=persons&{param}={exact}&{param}_t=exact".format(**format_kwargs)) + assert_no_results(client.get(u"/v1/search?collection=persons&{param}=foobarbaz&{param}_t=starts".format(**format_kwargs))) + assert is_einstein_result(u"/v1/search?collection=persons&{param}={starts}&{param}_t=starts".format(**format_kwargs)) + assert_no_results(client.get(u"/v1/search?collection=persons&{param}=foobarbaz&{param}_t=like".format(**format_kwargs))) + assert is_einstein_result(u"/v1/search?collection=persons&{param}={like}&{param}_t=like".format(**format_kwargs)) + + # exact match params + for param, attr, val, invalid_val, no_results_val in (("sex", "gender", "M", "FOO", "F"), + ("treenum", "tree_num", 1196, "FOO", "1002")): + assert PERSON_EINSTEIN[attr] == val + format_kwargs = {"param": param, "attr": attr, "val": val, "invalid_val": invalid_val, "no_results_val": no_results_val} + assert_no_results(client.get(u"/v1/search?collection=persons&{param}={no_results_val}".format(**format_kwargs))) + assert_error_message(u"/v1/search?collection=persons&{param}={invalid_val}".format(**format_kwargs), + "invalid value for {param} ({attr}): {invalid_val}".format(**format_kwargs)) + assert is_einstein_result(u"/v1/search?collection=persons&{param}={val}".format(**format_kwargs)) ### constants @@ -1323,7 +1392,7 @@ def test_search_persons(client, app): "OCCU" : "Physicist", "sex" : "M", "DEAT_PLAC_S" : "ZZ E796536 E796436 ZZ ", - "PID" : "I686", + "person_id" : "I686", "partners" : [{"id" : "I687", "name" : [ "Mileva", "Maric" ], "children": [{"id": "I835", "partners": [], "name" : [ "Lieserl", "Maric" ], "deceased" : True, "sex" : "F" }, {"id": "I836", "name" : [ "Hans Albert", "Einstein" ], @@ -1337,7 +1406,7 @@ def test_search_persons(client, app): {"id" : "I837", "name" : [ "Eduard", "Einstein" ], "partners" : [ ], "deceased" : True, "sex" : "M" } ], "deceased" : True, "sex" : "F" }, { "children" : [ ], "deceased" : True, "id" : "I688", "name" : [ "Elsa", "Einstein-Loewenthal" ], "sex" : "F" } ], - "SEX" : "M", + "SEX" : "M", "gender": "M", "BIRT_PLAC" : "Ulm a.D., Germany", "parents" : [ {"name" : [ "Hermann", "Einstein" ], "partners" : [ { "children" : [ ], "deceased" : True, "id" : "I685", "name" : [ "Pauline", "Koch" ], "sex" : "F" } ], @@ -1353,7 +1422,8 @@ def test_search_persons(client, app): "birth_year" : 1879, "DEAT_PLAC" : "Princeton, U.S.A.", "tree_version" : 0, - "marriage_years" : None, + "marriage_years" : [1923, 1934], # not really (sorry Einstein..) + "MARR_PLAC_lc": ["uklaulaulaska", "agrogorog"], # also not really "tree_num" : 1196, "FAMS" : "@F235@", "death_year" : 1955, @@ -1366,6 +1436,8 @@ def test_search_persons(client, app): "NAME" : "Albert /Einstein/", "NOTE_CONT" : "04105, USA. Tel.:207-781-4931.", "name_lc" : [ "albert", "einstein" ], + "first_name_lc": "albert", + "last_name_lc": "einstein", "NOTE" : "The Einstein Tree was compiled by Daniel Einstein, POB 6004, Falmouth,Maine", "BIRT_DATE" : "14.3.1879", "BIRT_PLAC_lc" : "ulm a.d., germany", @@ -1376,4 +1448,4 @@ def test_search_persons(client, app): "He": "Albert Einstein" },} -PERSON_LIVING = {"PID" : "I687", "Slug" : { "En" : "person_1196;0.I687" }, "deceased" : False} +PERSON_LIVING = {"person_id" : "I687", "Slug" : { "En" : "person_1196;0.I687" }, "deceased" : False, "tree_num": 1933, "tree_version": 0, "name": ["mookie", "shooki"]} diff --git a/tests/test_trees.py b/tests/test_trees.py index b9bc8ec..bb2a243 100644 --- a/tests/test_trees.py +++ b/tests/test_trees.py @@ -71,24 +71,21 @@ def test_migrate_trees(mocker): def on_save(row): collection_name = "persons" doc = parse_doc(row, collection_name) - id_field = get_collection_id_field(collection_name) - saved_docs.append((row, collection_name, id_field, doc)) - # update_row.delay(doc, collection_name) + saved_docs.append((row, collection_name, doc)) return doc assert migrate_trees(cursor, on_save=on_save) == 1 i29 = [doc for doc in saved_docs if doc[0]["id"] == "I29"][0] assert i29[0]["id"] == "I29" # row assert i29[1] == "persons" # collection_name - assert i29[2] == "id" # collection_id_field - assert i29[3]["id"] == "I29" # doc - assert i29[3]["deceased"] == False + assert i29[2]["id"] == "I29" # doc + assert i29[2]["deceased"] == False - i19 = [doc for doc in saved_docs if doc[0]["id"] == "I19"][0][3] + i19 = [doc for doc in saved_docs if doc[0]["id"] == "I19"][0][2] assert i19["id"] == "I19" assert i19["deceased"] == True - i9 = [doc for doc in saved_docs if doc[0]["id"] == "I09"][0][3] + i9 = [doc for doc in saved_docs if doc[0]["id"] == "I09"][0][2] assert i9["marriage_years"] == [1933] assert i9["birth_year"] == 1911 assert i9["death_year"] == 1965