Complexe query ( for me ;) ) with many match_all and range


(alain ibrahim) #1

Hello

I'm quite new on elasticsearch.

I made a form who query an elasticsearch document for getting the datas.

In the form there is mutiple input :
image_yes : checkbox
NAME : string
COLLECTION : string
CATALOGNUMBER:string
RECORDNUMBER: string
LOCALISATION: string
EVENTID : integer
event_date_start: year integer
event_date_end: year integer

the search is general: on all the fields of the document
I made many simples queries who works but i can't make a complexe one
working with AND and RANGE. All the exemples i see use "match_all:{}".
I also need the use of "*" and "?" in the query.

this work ok:

curl -XGET 'localhost:9200/donnees/specimens/_search?pretty=true' -d '{
"fields" : ["EVENTID", "CATALOGNUMBER", "RECORDNUMBER"],
"query" : {
"query_string" : {
"query" : "CATALOGNUMBER:P000023*"

    }         
}

}'

curl -XGET 'localhost:9200/donnees/specimens/_search?pretty=true' -d '{
"fields" : ["EVENTID", "CATALOGNUMBER", "RECORDNUMBER"],
"query" : {
"filtered" : {
"filter" : {
"range":{"EVENTID": {"from" : 36,
"to" : 50,
"include_lower" : true,
"include_upper" : false}
}
}
}
}
}'

this working ok too:

curl -XGET 'localhost:9200/donnees/specimens/_search?pretty=true' -d '{
"fields" : ["EVENTID", "CATALOGNUMBER", "RECORDNUMBER"],
"query" : {
"bool" : {
"must" : [
{
"query_string":{"query" : "CATALOGNUMBER:P000023*"}
},
{
"query_string":{"query" :
"RECORDNUMBER:recordnumber236*"}
}
]
}
},
"highlight": {"pre_tags": [""], "post_tags": [""],
"fields": {"*": {}}},
"facets": {
"lifestage": {"terms": { "field": "LIFESTAGE", "size": 20}},
"sex": {"terms": {"field": "SEX", "size": 20}},
"continent": {"terms": {"field": "CONTINENT", "size": 20}},
"institutioncode": {"terms": {"field": "INSTITUTIONCODE", "size":
20 }}
}
}'

*trying to merge but fail : *
I need that the facets are made with the results so i can't use "filtering"
if i understand good.
I try many syntaxes but nothink good.

(error)
curl -XGET 'localhost:9200/donnees/specimens/_search?pretty=true' -d '{
"fields" : ["EVENTID", "CATALOGNUMBER", "RECORDNUMBER"],
"query" : {
"filtered" : {
"filter" : {
"range":{"EVENTID": {"from" : 36,
"to" : 50,
"include_lower" : true,
"include_upper" : false}
}
},
"query_string" : {
"query" : "CATALOGNUMBER:P000023*"
}
}
},
"highlight": {"pre_tags": [""], "post_tags": [""],
"fields": {"": {}}},
"facets": {
"lifestage": {"terms": { "field": "LIFESTAGE", "size": 20}},
"sex": {"terms": {"field": "SEX", "size": 20}},
"continent": {"terms": {"field": "CONTINENT", "size": 20}},
"institutioncode": {"terms": {"field": "INSTITUTIONCODE", "size":
20 }}
}
}'
error :
curl -XGET 'localhost:9200/donnees/specimens/_search?pretty=true' -d '{
"fields" : ["EVENTID", "CATALOGNUMBER", "RECORDNUMBER"],
"query" : {
"filtered" : {
"filter" : {
"range":{"EVENTID": {"from" : 36,
"to" : 50,
"include_lower" : true,
"include_upper" : false}
}
}
},
"query_string" : { "query" : "CATALOGNUMBER:P000023
" }
},
"highlight": {"pre_tags": [""], "post_tags": [""],
"fields": {"*": {}}},
"facets": {
"lifestage": {"terms": { "field": "LIFESTAGE", "size": 20}},
"sex": {"terms": {"field": "SEX", "size": 20}},
"continent": {"terms": {"field": "CONTINENT", "size": 20}},
"institutioncode": {"terms": {"field": "INSTITUTIONCODE", "size":
20 }}
}
}'

how can i put a AND query with Range please ?

I whish somethink like this in pseudo sql:

select * from document where :
image_yes is true
AND NAME : "name"
AND COLLECTION : "collection*"
AND CATALOGNUMBER:"catalognumber*"
AND RECORDNUMBER:"recordnumber*"
AND LOCALISATION: "localisation"
AND
"range":{"EVENTID": {"from" : 36, "include_lower" : true
}
AND
"range":{" event_date": {"from" : event_date_start,
"to" : event_data_end,
"include_lower" : true,
"include_upper" : false}
}

Many thanks
Alain

--
You received this message because you are subscribed to the Google Groups "elasticsearch" group.
To unsubscribe from this group and stop receiving emails from it, send an email to elasticsearch+unsubscribe@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/elasticsearch/2d8f34dd-37bf-4850-8bc3-cd4b84ac02db%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.


(alain ibrahim) #2

EDIT 1 ;

this seem to work for begining :

curl -XGET 'localhost:9200/donnees/specimens/_search?pretty=true' -d '{
"fields" : ["E_EVENTID", "O_CATALOGNUMBER", "O_RECORDNUMBER"],
"query" : {
"bool" : {
"must" : [
{
"query_string":{"query" : "O_CATALOGNUMBER:P000023*"}
},
{
"query_string":{"query" :
"O_RECORDNUMBER:recordnumber236*"}
},
{
"range" : {
"E_EVENTID" : {
"gte" : 36,
"lte" : 60
}
}
}
]
}
},
"highlight": {"pre_tags": [""], "post_tags": [""],
"fields": {"*": {}}},
"facets": {
"lifestage": {"terms": { "field": "O_LIFESTAGE", "size": 20}},
"sex": {"terms": {"field": "O_SEX", "size": 20}},
"continent": {"terms": {"field": "L_CONTINENT", "size": 20}},
"institutioncode": {"terms": {"field": "I_INSTITUTIONCODE", "size":
20 }}
}
}'

Le lundi 1 septembre 2014 11:56:42 UTC+2, alain ibrahim a écrit :

Hello

I'm quite new on elasticsearch.

I made a form who query an elasticsearch document for getting the datas.

In the form there is mutiple input :
image_yes : checkbox
NAME : string
COLLECTION : string
CATALOGNUMBER:string
RECORDNUMBER: string
LOCALISATION: string
EVENTID : integer
event_date_start: year integer
event_date_end: year integer

the search is general: on all the fields of the document
I made many simples queries who works but i can't make a complexe one
working with AND and RANGE. All the exemples i see use "match_all:{}".
I also need the use of "*" and "?" in the query.

this work ok:

curl -XGET 'localhost:9200/donnees/specimens/_search?pretty=true' -d '{
"fields" : ["EVENTID", "CATALOGNUMBER", "RECORDNUMBER"],
"query" : {
"query_string" : {
"query" : "CATALOGNUMBER:P000023*"

    }         
}

}'

curl -XGET 'localhost:9200/donnees/specimens/_search?pretty=true' -d '{
"fields" : ["EVENTID", "CATALOGNUMBER", "RECORDNUMBER"],
"query" : {
"filtered" : {
"filter" : {
"range":{"EVENTID": {"from" : 36,
"to" : 50,
"include_lower" : true,
"include_upper" : false}
}
}
}
}
}'

this working ok too:

curl -XGET 'localhost:9200/donnees/specimens/_search?pretty=true' -d '{
"fields" : ["EVENTID", "CATALOGNUMBER", "RECORDNUMBER"],
"query" : {
"bool" : {
"must" : [
{
"query_string":{"query" : "CATALOGNUMBER:P000023*"}
},
{
"query_string":{"query" :
"RECORDNUMBER:recordnumber236*"}
}
]
}
},
"highlight": {"pre_tags": [""], "post_tags": [""],
"fields": {"*": {}}},
"facets": {
"lifestage": {"terms": { "field": "LIFESTAGE", "size": 20}},
"sex": {"terms": {"field": "SEX", "size": 20}},
"continent": {"terms": {"field": "CONTINENT", "size": 20}},
"institutioncode": {"terms": {"field": "INSTITUTIONCODE", "size":
20 }}
}
}'

*trying to merge but fail : *
I need that the facets are made with the results so i can't use
"filtering" if i understand good.
I try many syntaxes but nothink good.

(error)
curl -XGET 'localhost:9200/donnees/specimens/_search?pretty=true' -d '{
"fields" : ["EVENTID", "CATALOGNUMBER", "RECORDNUMBER"],
"query" : {
"filtered" : {
"filter" : {
"range":{"EVENTID": {"from" : 36,
"to" : 50,
"include_lower" : true,
"include_upper" : false}
}
},
"query_string" : {
"query" : "CATALOGNUMBER:P000023*"
}
}
},
"highlight": {"pre_tags": [""], "post_tags": [""],
"fields": {"": {}}},
"facets": {
"lifestage": {"terms": { "field": "LIFESTAGE", "size": 20}},
"sex": {"terms": {"field": "SEX", "size": 20}},
"continent": {"terms": {"field": "CONTINENT", "size": 20}},
"institutioncode": {"terms": {"field": "INSTITUTIONCODE", "size":
20 }}
}
}'
error :
curl -XGET 'localhost:9200/donnees/specimens/_search?pretty=true' -d '{
"fields" : ["EVENTID", "CATALOGNUMBER", "RECORDNUMBER"],
"query" : {
"filtered" : {
"filter" : {
"range":{"EVENTID": {"from" : 36,
"to" : 50,
"include_lower" : true,
"include_upper" : false}
}
}
},
"query_string" : { "query" : "CATALOGNUMBER:P000023
" }
},
"highlight": {"pre_tags": [""], "post_tags": [""],
"fields": {"*": {}}},
"facets": {
"lifestage": {"terms": { "field": "LIFESTAGE", "size": 20}},
"sex": {"terms": {"field": "SEX", "size": 20}},
"continent": {"terms": {"field": "CONTINENT", "size": 20}},
"institutioncode": {"terms": {"field": "INSTITUTIONCODE", "size":
20 }}
}
}'

how can i put a AND query with Range please ?

I whish somethink like this in pseudo sql:

select * from document where :
image_yes is true
AND NAME : "name"
AND COLLECTION : "collection*"
AND CATALOGNUMBER:"catalognumber*"
AND RECORDNUMBER:"recordnumber*"
AND LOCALISATION: "localisation"
AND
"range":{"EVENTID": {"from" : 36, "include_lower" : true
}
AND
"range":{" event_date": {"from" : event_date_start,
"to" : event_data_end,
"include_lower" : true,
"include_upper" : false}
}

Many thanks
Alain

--
You received this message because you are subscribed to the Google Groups "elasticsearch" group.
To unsubscribe from this group and stop receiving emails from it, send an email to elasticsearch+unsubscribe@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/elasticsearch/cb885e1e-8db5-4001-abf9-e24fc7839913%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.


(system) #3