Desidero utilizzare questa opportunità per pubblicizzare un approccio diverso al problema indicato. In realtà, ElasticSearch: The Definitive Guide fa buon lavoro da solo, non mi resta che citarlo:
Quattro tecniche comuni vengono utilizzati per gestire dati relazionali in elasticsearch:
- Applicazione sul lato unisce
oggetti
- dati denormalizzazione
- annidata
relazioni padre
- /bambino
Spesso la soluzione finale richiede una miscela di alcune di queste tecniche .
La denormalizzazione dei dati in pratica significa che i dati vengono memorizzati in modo che una singola query esegua il trucco che si farebbe prima con due query consecutive.
Qui spiegherò the example dal libro di cui sopra. Supponiamo di avere due seguenti indici, e si desidera trovare tutti i post del blog scritto da una persona di nome John:
PUT /my_index/user/1
{
"name": "John Smith",
"email": "[email protected]",
"dob": "1970/10/24"
}
PUT /my_index/blogpost/2
{
"title": "Relationships",
"body": "It's complicated...",
"userID": 1
}
non c'è altra scelta se non per andare a prendere prima gli ID di tutti Johns nel database. Che cosa si potrebbe fare, invece è quello di spostare alcune delle informazioni utente sull'oggetto blogpost:
PUT /my_index/user/1
{
"name": "John Smith",
"email": "[email protected]",
"dob": "1970/10/24"
}
PUT /my_index/blogpost/2
{
"title": "Relationships",
"body": "It's complicated...",
"user": {
"id": 1,
"name": "John Smith"
}
}
Quindi consentendo di ricerca sulla user.name
dell'indice blogpost
.
Oltre ai metodi tradizionali elasticsearch si può anche considerare l'utilizzo di plugin di terze parti come Siren Join:
Questo join viene utilizzato per filtrare un set documento basato su un secondo set documento, da qui il suo nome. È equivalente all'operatore EXISTS() in SQL.
Questo è stato chiesto più volte: http://stackoverflow.com/questions/26977932/elasticsearch-find-documents-by-another-document. E non credo ci sia altra opzione che quella o [mlt query] (http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/query-dsl-mlt-query.html). –
Hai provato? Supponiamo di no, se non hai risposto a quelle risposte. Se l'hai fatto e stai ancora facendo domande al riguardo, cosa hai provato e perché non sei soddisfatto di mlt? –
@AndreiStefan Può più, usare il filtro su determinati valori? Per quanto ne so, seleziona i termini e le ricerche pertinenti nel campo indicato, ma come posso forzare il filtro su alcuni campi? –