Enkelt Django application som visar hur man kan göra enkelt API som hämtar data från Elasticserach utan att definiera models.
Django samt requests modulen måste vara installerad för att köra applicationen.
Applicationen startas via python manage.py runserver
.
Koden för API:et finns i sagenkarta_api/urls.py
och sagenkarta_api/views.py
documents/?[params]
topics/?[params]
title_topics/?[params]
collection_years/?[params]
birth_years/?[params]
categories/?[params]
types/?[params]
socken/?[params]
harad/?[params]
landskap/?[params]
persons/?[params]
informants/?[params]
collectors/?[params]
gender/?[params]
document/?[id]
def createQuery(request)
Tar in request object från Django och bygger upp Elasticsearch query baserad på querysträng från URL:et. Levererar Elasticsearch query som dictionary.
Giltiga params:
- collection_years=[från,till]
Hämtar documenter vars
year
är mellan från och till. Exempel:collection_year=1900,1910
- search=[söksträng]
Hämtar documenter där ett eller flera eller alla ord förekommer i titel eller text. Exempel: (ett eller flera ord)
search=svart hund
, (alla ord)search=svart,hund
- category=[kategori bokstav]
Hämtar documenter som finns i angiven kategori (en eller flera). Exempel:
category=L,H
- type=[type]
Hämtar documenter av angiven typ (en eller flera). Exempel:
type=arkiv,tryckt
- soken_id=[id]
Hämtar documenter upptäckt i angiven socken (en eller flera). Exempel: (sägner från Göteborgs stad och Partille)
socken_id=202,243
- socken=[socken namn]
Hämtar documenter upptäckt i angiven socken, men här letar vi efter namn (ett eller flera, måste vara helt namn med ' sn' i slutet). Exempel:
socken=Fritsla sn
- person=[person namn]
Hämtar documenter vars upptäckare eller informant matchar angivet namn. Exempel: (alla som heter Ragnar eller Nilsson)
person=Ragnar Nilsson
- person_exact=[person namn]
Hämtar documenter var upptäckare eller informant matchar angivet helt namn. Exempel: (leter bara efter "Ragnar Nilsson")
person=Ragnar Nilsson
- person_relation=[informant,collector]
Säger till om
person
ellerperson_exact
letar efter upptäckare eller informantar. Exempel:person_relation=informant
def esQuery(request, query)
Tar in request object från Django och Elasticsearch dictionary och leverar respons från Elasticserach.
Exempel:
# Endpoint /urls/?[params]
# url(r'^types/', views.getTypes, name='getTypes')
# Aggregate types (arkiv, tryckt, register, inspelning, ...)
def getTypes(request):
# Elasticsearch aggregation query
# createQuery bygger upp själva query dictionary baserad på URL paramsträng
query = {
'query': createQuery(request),
'size': 0,
'aggs': {
'data': {
'terms': {
'field': 'materialtype',
'size': 10000,
'order': {
'_term': 'asc'
}
}
}
}
}
# Hämtar respons från Elasticsearch
esQueryResponse = esQuery(request, query)
# Leverar ES respons som JSON
return esQueryResponse