Hvordan filtrerer jeg elasticsearch -resultater?

Hvordan filtrerer jeg elasticsearch -resultater?
Som standard bruker Elasticsearch en relevansscore for å sortere resultatene fra et søk. En relevansscore bestemmer hvor relevant et dokument er avhengig av spørket data.

Vi kan imidlertid bruke filtre for å begrense og maksimere de aktuelle dokumentene som er returnert fra en spørring.

Denne guiden vil lære å bruke forhold i en Elasticsearch -spørring for å filtrere ut mer presise spørringsresultater.

Filtrer etter termin

Vi kan bruke begrepet spørring for å filtrere ut resultater i en spørring. For eksempel filtrerer spørringen nedenfor dokumenter der bynavnet er New York.

Få /kibana_sample_data_ecommerce /_search

"spørring":
"bool":
"Filter": [
"begrep":
"Geoip.City_name ":" New York "

]


I eksemplet på spørringen ovenfor bruker vi et boolsk filter for å søke etter dokumenter som samsvarer med bytnavnet som “New York.”

Eksempelets resultat for dette er:

Flere vilkår

Du kan også matche dokumenter som samsvarer med to eller flere vilkår. Vi kan for eksempel spørre om poster der typen = orden og region = "New York"

Få /kibana_sample_data_ecommerce /_search

"spørring":
"bool":
"Filter": [
"begrep":
"Type": "Bestill"
,

"begrep":
"Geoip.Region_navn ":" New York "


]


I et slikt eksempel er både typen og geoip.Region_navnfelt må evaluere tro mot det søkte begrepet.

Eksempel Resultat:

Rekkeviddefilter

For å filtrere med en numerisk verdi, kan du bruke boolske forhold. For å filtrere for resultater der prisen på produktet er større enn 1000, kan vi for eksempel gjøre:

Få /kibana_sample_data_ecommerce /_search

"spørring":
"bool":
"Filter": [
"område":
"Produkter.base_price ":
"GTE": 1000


]

Ovennevnte spørring skal filtrere dokumentene der basen til varene er større enn eller lik 1000.

Her er noen eksempelresultater:

Filtrer etter setning

Anta at du bare husker en bestemt setning og ikke vil hente alle dokumentene i indeksen? Du kan bruke must og match_phrase for å begrense resultatene.

For eksempel, hva om vi bare ønsker å få produktene under menns kategori, men er usikre på alle de spesifikke typene? Vi kan kjøre et spørsmål som:

Få /kibana_sample_data_ecommerce /_search

"spørring":
"bool":
"må": [
"match_phrase":
"Produkter.Kategori ":" Men's "

]


I eksemplet over bruker vi den boolske must for å sikre at den matchede frasen samsvarer med den som er spesifisert.

Nedenfor er eksempel resultater:

Må ikke filtrere

Vi kan også bruke Must_not -filteret for å fjerne alle dokumenter som inneholder en spesifikk setning eller rekkevidde. For å ekskludere alle dokumentene der kjøpsdatoen er mandag, kan vi for eksempel gjøre:

Få /kibana_sample_data_ecommerce /_search

"spørring":
"bool":
"må ikke": [
"kamp":
"Day_of_week": "Mandag"

]


Eksempel Resultater Returdokumenter som ikke inneholder DAY_OF_WEEK som mandag.

Konklusjon

Denne guiden diskuterte filtrering av elasticsearch -resultater ved hjelp av boolsk betinget som rekkevidde, must og mer.