-
Notifications
You must be signed in to change notification settings - Fork 2
3_Abfragen mit Query DSL und CURL
!!! Diese Seite wurde als Hilfsseite während der Entwicklung erstellt und enthält gegebenfalls veraltete Angaben! !!!
- Queries: Suchabfragen bestehen aus einer oder mehreren Queries
- Filter: Sind eine spezielle Art von Query (sie beziehen sich auf ein Feld und sind speziell performant)
Variante 1:
GET lsb/bibliographicResource/_search
Variante 2:
GET lsb/bibliographicResource/_search
{
"query": {
"match_all": {}
}
}
Quelle: http://okfnlabs.org/blog/2013/07/01/elasticsearch-query-tutorial.html
GET /lsb/person/_search
{
"query": {
"filtered": {
"filter": {
"bool": {
"must": {"term": {"_id": "http://data.swissbib.ch/person/aa23c630-97bd-358f-88eb-c1b4fb1fc629"}}
}
}
}
}
}
GET lsb/bibliographicResource/_search
{
"query" : {
"filtered" : {
"filter" : {
"terms" : {
"_id" : ["http://data.swissbib.ch/resource/32497695X",
"http://data.swissbib.ch/resource/32887101X"]
}
}
}
}
}
GET /lsb/person/_search
{
"query": {
"filtered": {
"filter": {
"bool": {
"must": {"term": {"foaf:lastName": "bolz"}},
"must": {"term": {"foaf:firstName": "reinhardt"}}
}
}
}
}
}
Achtung: Hier können dennoch mehrere Resultate zurückgeliefert werden, da die Kombination von Vor- und Nachname im Gegensatz zur Personen-ID selbst nicht eindeutig ist (z.B. könnten im Index mehere Autoren mit dem Namen Max Meier enthalten sein).
GET /lsb/person/_search
{
"query": {
"filtered": {
"filter": {
"in": {
"@id": ["http://data.swissbib.ch/person/aa23c630-97bd-358f-88eb-c1b4fb1fc629", "http://data.swissbib.ch/person/2b8fcc4a-c43a-3e12-8cb9-afc1c21aa6aa", "http://data.swissbib.ch/person/d633b16c-95b4-3fb3-a646-f7009c84f78b"]
}
}
}
}
}
GET lsb/bibliographicResource/_search
{
"query": {
"filtered": {
"filter": {
"bool": {
"must": [
{
"terms": {
"dct:subject": ["http://d-nb.info/gnd/4037822-6"]
}
}
]
}
}
}
}
}
Suche nach Personen, welche bestimmte Inhalte (Felder/Properties) besitzen oder bestimmte Inhalte (Felder/Properties) nicht besitzen
GET testsb/person/_search
{
"query": {
"filtered": {
"filter": {
"bool": {
"must": [
{
"missing": {
"field": "foaf:name"
}
},
{
"missing": {
"field": "foaf:firstName"
}
},
{
"missing": {
"field": "foaf:lastName"
}
},
{
"exists": {
"field": "schema:givenName"
}
},
{
"missing": {
"field": "schema:firstName"
}
}
]
}
}
}
}
}
sudo apt-get install openjdk-8-jdk-headless python-pip
sudo pip install colout
echo "alias ppj='python -m json.tool | native2ascii -encoding UTF-8 -reverse | colout -t json'" >> ~/.bash_aliases
source ~/.bash_aliases
Quellen:
- http://stackoverflow.com/a/1920585
- https://stackoverflow.com/questions/352098/how-can-i-pretty-print-json#comment17494666_1920585
- http://stackoverflow.com/a/8872702
- https://stackoverflow.com/questions/352098/how-can-i-pretty-print-json#comment25596405_1920585
Wichtig! Das abschliessende Anführungszeichen '
muss auf eine neue Zeile gesetzt werden, sonst wird die letzte Zeile der Abfrage ignoriert. (Symptome sind dann, dass eine unvollständige oder leere Antwort zurückgeliefert wird.)
curl -XGET 'sb-ues1.swissbib.unibas.ch:8080/lsb/person/_search' -d '
{
"query": {"match_all": {}}, "size": 100, "from": 10
}
'
Bedeutung:
-
size
: Anzahl zurückzugebende Treffer -
from
: Offset
Quelle: https://www.elastic.co/guide/en/elasticsearch/reference/current/_introducing_the_query_language.html
curl -XGET 'sb-ues1.swissbib.unibas.ch:8080/lsb/person/_search' -d '
{
"query": {
"filtered": {
"filter": {
"bool": {
"must": {"term": {"@id": "http://data.swissbib.ch/person/d633b16c-95b4-3fb3-a646-f7009c84f78b"}}
}
}
}
}
}
'
curl -XGET 'sb-ues1.swissbib.unibas.ch:8080/lsb/bibliographicResource/_search' -d '
{
"query": {
"filtered": {
"filter": {
"bool": {
"must": {"term": {"@id": "http://data.swissbib.ch/resource/32887101X"}}
}
}
}
}
}
'
curl -XGET 'sb-ues1.swissbib.unibas.ch:8080/gnd/_search' -d '
{
"query": {
"filtered": {
"filter": {
"bool": {
"must": {"term": {"_id": "http://d-nb.info/gnd/4134999-4"}}
}
}
}
}
}
'
Bemerkung: Suchen nach @id
funktioniert bei gnd
nicht.
curl -XGET 'sb-ues1.swissbib.unibas.ch:8080/gnd/_search' -d '
{"query":{"multi_match":{"fields":["@id"],"type":["cross_fields"],"operator":["and"],"query":"http://d-nb.info/gnd/4134999-4"}}}
'
curl -XGET 'sb-ues1.swissbib.unibas.ch:8080/lsb/person/_search' -d '
{
"query": {"match_all": {}}, "size": 10000, "from": 0
}
' | ppj | grep -A50 -B200 'lsb:dbpNationalityAsLiteral'
Mittels grep
wird nach dem gewünschten Feld gesucht. Es werden auch die 200 vorhergehenden Zeilen (Before), sowie die 50 nachfolgenden Zeilen (After) ausgegeben. Die Resultate werden abgetrennt mittels einer Zeile mit Inhalt --
.
Falls die Konsole anschliessend eingefärbt oder sonstwie kaputt ist, kann sie mit reset
zurückgesetzt werden.
curl -XGET 'sb-ues1.swissbib.unibas.ch:8080/lsb/person/_msearch' -d '
{"index":"lsb","type":"person"}
{"query":{"multi_match":{"fields":["@id"],"type":["cross_fields"],"operator":["and"],"query":"http://data.swissbib.ch/person/d633b16c-95b4-3fb3-a646-f7009c84f78b"}}}
{"index":"lsb","type":"bibliographicResource"}
{"query":{"multi_match":{"fields":["dct:contributor"],"type":["cross_fields"],"operator":["and"],"query":"http://data.swissbib.ch/person/aa23c630-97bd-358f-88eb-c1b4fb1fc629"}}}
'
curl -XGET 'sb-ues1.swissbib.unibas.ch:8080/gnd/_msearch' -d '
{"index":"gnd","type":"DEFAULT"}
{"query":{"multi_match":{"fields":["@id"],"type":["cross_fields"],"operator":["and"],"query":"http://d-nb.info/gnd/807915-8"}}}
{"index":"gnd","type":"DEFAULT"}
{"query":{"multi_match":{"fields":["@id"],"type":["cross_fields"],"operator":["and"],"query":"http://d-nb.info/gnd/4134999-4"}}}
'
curl -XGET 'sb-ues1.swissbib.unibas.ch:8080/gnd/_search' -d '
{
"query": {
"filtered": {
"filter": {
"in": {
"_id": ["http://d-nb.info/gnd/807915-8", "http://d-nb.info/gnd/4134999-4", "http://d-nb.info/gnd/4134999-4"]
}
}
}
}
}
'
Der Unterschied besteht in der ersten Zeile (_count
anstatt _search
)
curl -XGET 'sb-ues1.swissbib.unibas.ch:8080/gnd/_count' -d '
{
"query": {
"filtered": {
"filter": {
"in": {
"_id": ["http://d-nb.info/gnd/807915-8", "http://d-nb.info/gnd/4134999-4", "http://d-nb.info/gnd/4134999-4"]
}
}
}
}
}
'
Quelle: https://www.elastic.co/guide/en/elasticsearch/reference/current/search-count.html
Die Ausgabe kann verschönert dargestellt werden, indem folgendes an die curl-Abfrage angehängt wird:
| ppj
(dessen Inhalt wir weiter oben definiert haben)