8

Sto usando elasticsearch per filtrare e cercare da file json e sono novizio in questa tecnologia. Quindi sono un po 'confuso su come scrivere come query su elasticsearch.Come cercare in Elasticsearch

select * from table_name where 'field_name' like 'a%' 

Questa è una query mysql. Come scrivo questa query in Elasticsearch? Sto usando elasticsearch versione 0.90.7.

+0

0.90.7 è una versione molto vecchia di ES. Suggerisco di usare l'ultima versione. –

+1

Inoltre, leggere la [documentazione] (https://www.elastic.co/guide/en/elasticsearch/guide/current/partial-matching.html)! Copre molti casi d'uso e offre varie soluzioni per ciò che ti serve. –

risposta

16

Consiglio vivamente di aggiornare la vostra versione elasticsearch se possibile, ci sono stati cambiamenti significativi dal 0.9.x.

Questa domanda non è abbastanza specifica, poiché ci sono molti modi in cui ElasticSearch può soddisfare questa funzionalità e differiscono leggermente sul tuo obiettivo generale. Se stai cercando di replicare esattamente quella query SQL, in questo caso usa la query con caratteri jolly o la query prefisso.

Utilizzando una query wildcard:

Nota: Fare attenzione con ricerche con caratteri jolly, sono lenti. Evita l'uso di caratteri jolly all'inizio delle stringhe.

GET /my_index/table_name/_search 
{ 
    "query": { 
     "wildcard": { 
      "field_name": "a*" 
     } 
    } 
} 

O Prefix query

GET /my_index/table_name/_search 
{ 
    "query": { 
     "prefix": { 
      "field_name": "a" 
     } 
    } 
} 

O partial matching:

Nota: NON usare ciecamente corrispondenza parziale, mentre ci sono casi d'angolo per il suo utilizzo, corretto utilizzo di analizzatori è quasi sempre meglio.

Anche questa query esatta sarà equivalente a LIKE '%a%', che, ancora una volta, potrebbe essere la configurazione migliore con l'uso corretto del mapping e una ricerca di query normale!

GET /my_index/table_name/_search 
{ 
    "query": { 
     "match_phrase": { 
      "field_name": "a" 
     } 
    } 
} 

Se stai leggendo questo chiedendo circa l'interrogazione ES simile per la ricerca-as-you-type Vorrei suggerire la lettura su edge-ngrams, che si riferiscono ad un uso corretto della cartografia a seconda di ciò che si sta tentando di fare =)

1
GET /indexName/table_name/_search 
{ 
    "query": { 
     "match_phrase": { 
      "field_name": "your partial text" 
     } 
    } 
} 

È possibile utilizzare "type" : "phrase_prefix" come prefisso o inviati risolvere si cerca codice Java per la stessa:

AndFilterBuilder andFilterBuilder = FilterBuilders.andFilter(); 
andFilterBuilder.add(FilterBuilders.queryFilter(QueryBuilders.matchPhraseQuery("field_name", 
      "your partial text"))); 

Gave 'e filtro' esempio in modo che è possibile aggiungere filtri extra se si vuole. Controllare questo per maggiori dettagli:

https://www.elastic.co/guide/en/elasticsearch/guide/current/slop.html

+0

perché il downvote? Che cosa sta cercando –