Sto facendo una ricerca generale contro elasticsearch (1.7) e tutto va bene, tranne che i miei numeri di account hanno barre in avanti in loro. Il campo del numero di account non è il campo id ed è "not_analyzed".escaping le barre in avanti in elasticsearch
Se eseguo una ricerca su un numero di conto, ad es. AC/1234/A01 quindi ottengo migliaia di risultati, presumibilmente perché sta facendo una ricerca regolare (?).
{
"query" : { "query_string" : {"query" : "AC/1234/A01"} }
}
posso ottenere il risultato che voglio facendo una ricerca esatta corrispondenza
{
"query" : { "query_string" : {"query" : "\"AC/1234/A01\""} }
}
Questo in realtà mi dà il risultato che voglio e, probabilmente, si inserisce il disegno di legge come opzione di backup (che circonda tutto 'single parola "cerca tra virgolette"). Tuttavia, sto pensando che se fanno una ricerca di più parole, incluso il numero di conto, tornerò a migliaia di risultati e sebbene non riesca a vedere il valore di tale ricerca, vorrei evitare che ciò accada.
In sostanza, ho un'app java che interroga la ricerca elastica e vorrei sfuggire a tutte le barre inserite nella GUI.
mio Googling mi ha detto che
{
"query" : { "query_string" : {"query" : "AC\\/1234\\/A01"} }
}
dovrebbe fare questo, ma non fa differenza, le opere di query, ma ho ancora ottenere migliaia di risultati.
Qualcuno potrebbe indicarmi la giusta direzione?
Perché stai usando 'query_string' qui? 'term' corrisponde a un termine così com'è. – Maroun
C'è una casella di immissione per i termini di ricerca che può essere una parola o una frase, con o senza operatori booleani. Alla base, sta interrogando tutti i dati. Funziona bene tranne per il /. A quanto ho capito, un termine query può interrogare solo un campo alla volta (e io dovrei analizzare personalmente la query per usare una query sui termini, credo)? Per favore, correggimi se sbaglio! – gringogordo
La differenza principale tra query 'term' e' match' e 'query_string' è che' term' non sta analizzando l'input. Usando la query 'term' puoi cercare un termine e usando' terms' puoi fare un paio di termini contemporaneamente. Più appropriato per la ricerca su più campi è 'multi_match' o' query_string'. Non ho controllato, ma penso che potresti anche usare la query 'term' con alias' _all', e 'trick' 'terms' query per esaminare più di una colonna in una volta. – slawek