term
query corrisponde a un singolo termine così com'è: il valore non viene analizzato . Quindi, non deve essere minuscolo a seconda di ciò che hai indicizzato.
Se hai fornito Bennett
al momento dell'indicizzazione e il valore non viene analizzato, la seguente query non restituirà nulla:
{
"query": {
"term" : { "user" : "bennett" }
}
}
match_phrase
query analizzerà l'input se gli analizzatori sono definiti per il campo interrogato e troverà documenti che soddisfano i seguenti criteri:
- tutti i termini devono apparire nel campo
- devono avere lo stesso ordine del valore di input
Ad esempio, se indicizzi i seguenti documenti (utilizzando l' standard
analizzatore per il campo foo
):
{ "foo":"I just said hello world" }
{ "foo":"Hello world" }
{ "foo":"World Hello" }
Questa match_phrase
query restituirà solo il primo e il secondo documento:
{
"query": {
"match_phrase": {
"foo": "Hello World"
}
}
}
query_string
ricerca query, per impostazione predefinita, su un campo _all che contiene il testo di più campi di testo contemporaneamente. Inoltre, viene analizzato e supporta alcuni operatori (AND / OR ...), caratteri jolly e così via (vedere la sintassi correlata ).
Come le match_phrase
query, l'input viene analizzato in base all'analizzatore impostato nel campo interrogato.
A differenza di match_phrase
, i termini ottenuti dopo l'analisi non devono essere nello stesso ordine, a meno che l'utente non abbia utilizzato virgolette attorno all'input.
Ad esempio, utilizzando gli stessi documenti di prima, questa query restituirà tutti i documenti:
{
"query": {
"query_string": {
"query": "hello World"
}
}
}
Ma questa query restituirà gli stessi 2 documenti della match_phrase
query:
{
"query": {
"query_string": {
"query": "\"Hello World\""
}
}
}
C'è molto altro da dire sulle diverse opzioni per queste query, dai un'occhiata alla relativa documentazione:
Spero che questo sia abbastanza chiaro e che possa aiutare.