Nested query

Hi

I've created the following Index and mapping :

Index : curl -XPUT 'http://10.118.192.165:9200/matches'

Mapping:

curl -XPUT 'http://10.118.192.165:9200/matches/tags_nested/_mapping' -d '
{
"tags_nested":{
"properties":{
"name": {
"type": "string"
},
"total_runs": {
"type": "integer"
},
"matches_played": {
"type": "string"
},
"highest_score": {
"type": "string"
},
"tags": {
"type" : "nested"
}

}
}
}'

the data inserted is :

curl XPUT 'http://10.118.192.165:9200/matches/tags_nested/1' -d'
{
"name" : "sachin",
"total_runs" : "500",
"matches_played" : "4",
"highest_score" : "200*",
"tags" :[
{
"user" : "kuwar",
"tag" : "master blaster"
},
{
"user" : "nipun",
"tag" : "world class"
},
{
"user" : "mayank",
"tag" : "200 not out"
}
]

}'

curl XPUT 'http://10.118.192.165:9200/matches/tags_nested/2' -d'
{
"name" : "hayden",
"total_runs" : "300",
"matches_played" : "4",
"highest_score" : "110",
"tags" :[
{
"user" : "kuwar",
"tag" : "good knock"
},
{
"user" : "nipun",
"tag" : "match winning"
}
]

}'

I want to find the record where the user "kuwar" has a tag "master blaster"
. Have designed the following query but it does not give me the result.

curl -XGET
'http://10.118.192.165:9200/matches/tags_nested/_search?pretty=true' -d '
{
"query": {
"nested": {
"path": "tags",
"query":{
"filtered": {
"query": { "match_all": {}},
"filter": {
"and": [
{"term": {"tags.user": "kuwar"}},
{"term": {"tags.tag": "master blaster"}}
]
}
}
}
}
}
}'

the query does not give me the result. however if i change tags.tag to
"master" instead of "master blaster" the output comes.

how to solve this problem ?
thanks in advance.

--
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.
For more options, visit https://groups.google.com/groups/opt_out.

Hello Kuwar,

I think the problem here is that your tags are analyzed when you index them
(eg: "master blaster" is broken into terms "master" and "blaster"), while
your term queries are not analyzed. So in your example, you're searching
for the term "master blaster", which isn't there.

If you search for "master" or "blaster", it should find what you're looking
for.

Alternatively, if you want to have exact matches only (eg: match only
"master blaster"), then you need to set that "tag" field in the mapping to
"not_analyzed".

Best regards,
Radu

http://sematext.com/ -- Elasticsearch -- Solr -- Lucene

On Wed, Mar 13, 2013 at 8:26 AM, kuwar sahani kuwarsahani@gmail.com wrote:

Hi

I've created the following Index and mapping :

Index : curl -XPUT 'http://10.118.192.165:9200/matches'

Mapping:

curl -XPUT 'http://10.118.192.165:9200/matches/tags_nested/_mapping' -d '
{
"tags_nested":{
"properties":{
"name": {
"type": "string"
},
"total_runs": {
"type": "integer"
},
"matches_played": {
"type": "string"
},
"highest_score": {
"type": "string"
},
"tags": {
"type" : "nested"
}

}
}
}'

the data inserted is :

curl XPUT 'http://10.118.192.165:9200/matches/tags_nested/1' -d'
{
"name" : "sachin",
"total_runs" : "500",
"matches_played" : "4",
"highest_score" : "200*",
"tags" :[
{
"user" : "kuwar",
"tag" : "master blaster"
},
{
"user" : "nipun",
"tag" : "world class"
},
{
"user" : "mayank",
"tag" : "200 not out"
}
]

}'

curl XPUT 'http://10.118.192.165:9200/matches/tags_nested/2' -d'
{
"name" : "hayden",
"total_runs" : "300",
"matches_played" : "4",
"highest_score" : "110",
"tags" :[
{
"user" : "kuwar",
"tag" : "good knock"
},
{
"user" : "nipun",
"tag" : "match winning"
}
]

}'

I want to find the record where the user "kuwar" has a tag "master
blaster" . Have designed the following query but it does not give me the
result.

curl -XGET '
http://10.118.192.165:9200/matches/tags_nested/_search?pretty=true' -d '
{
"query": {
"nested": {
"path": "tags",
"query":{
"filtered": {
"query": { "match_all": {}},
"filter": {
"and": [
{"term": {"tags.user": "kuwar"}},
{"term": {"tags.tag": "master blaster"}}
]
}
}
}
}
}
}'

the query does not give me the result. however if i change tags.tag to
"master" instead of "master blaster" the output comes.

how to solve this problem ?
thanks in advance.

--
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.
For more options, visit https://groups.google.com/groups/opt_out.

--
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.
For more options, visit https://groups.google.com/groups/opt_out.

Hello dadoonet,

Thanks for quick reply,

I have created template that source was disabled but other fields are
stored and indexed still. I dont want to remove doc, I want only specific
field with value from this doc. And those fields will be available into
Field list in Elastic Search cluster. I have created template with those
field and they are added into list. But when I push data from couchbase to
Elasticsearch then it added all fields.

Can you please let me now some steps for create template for same.

Thanks
Suraj Bhansali

On Wed, Mar 13, 2013 at 11:56 AM, kuwar sahani kuwarsahani@gmail.comwrote:

Hi

I've created the following Index and mapping :

Index : curl -XPUT 'http://10.118.192.165:9200/matches'

Mapping:

curl -XPUT 'http://10.118.192.165:9200/matches/tags_nested/_mapping' -d '
{
"tags_nested":{
"properties":{
"name": {
"type": "string"
},
"total_runs": {
"type": "integer"
},
"matches_played": {
"type": "string"
},
"highest_score": {
"type": "string"
},
"tags": {
"type" : "nested"
}

}
}
}'

the data inserted is :

curl XPUT 'http://10.118.192.165:9200/matches/tags_nested/1' -d'
{
"name" : "sachin",
"total_runs" : "500",
"matches_played" : "4",
"highest_score" : "200*",
"tags" :[
{
"user" : "kuwar",
"tag" : "master blaster"
},
{
"user" : "nipun",
"tag" : "world class"
},
{
"user" : "mayank",
"tag" : "200 not out"
}
]

}'

curl XPUT 'http://10.118.192.165:9200/matches/tags_nested/2' -d'
{
"name" : "hayden",
"total_runs" : "300",
"matches_played" : "4",
"highest_score" : "110",
"tags" :[
{
"user" : "kuwar",
"tag" : "good knock"
},
{
"user" : "nipun",
"tag" : "match winning"
}
]

}'

I want to find the record where the user "kuwar" has a tag "master
blaster" . Have designed the following query but it does not give me the
result.

curl -XGET '
http://10.118.192.165:9200/matches/tags_nested/_search?pretty=true' -d '
{
"query": {
"nested": {
"path": "tags",
"query":{
"filtered": {
"query": { "match_all": {}},
"filter": {
"and": [
{"term": {"tags.user": "kuwar"}},
{"term": {"tags.tag": "master blaster"}}
]
}
}
}
}
}
}'

the query does not give me the result. however if i change tags.tag to
"master" instead of "master blaster" the output comes.

how to solve this problem ?
thanks in advance.

--
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.
For more options, visit https://groups.google.com/groups/opt_out.

--
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.
For more options, visit https://groups.google.com/groups/opt_out.

Please, don't hijack other threads and answer in your own thread!

--
David Pilato | Technical Advocate | Elasticsearch.com
@dadoonet | @elasticsearchfr | @scrutmydocs

Le 13 mars 2013 à 09:59, Suraj Bhansali bhansalisuraj@gmail.com a écrit :

Hello dadoonet,

Thanks for quick reply,

I have created template that source was disabled but other fields are stored and indexed still. I dont want to remove doc, I want only specific field with value from this doc. And those fields will be available into Field list in Elastic Search cluster. I have created template with those field and they are added into list. But when I push data from couchbase to Elasticsearch then it added all fields.

Can you please let me now some steps for create template for same.

Thanks
Suraj Bhansali

On Wed, Mar 13, 2013 at 11:56 AM, kuwar sahani kuwarsahani@gmail.com wrote:
Hi

I've created the following Index and mapping :

Index : curl -XPUT 'http://10.118.192.165:9200/matches'

Mapping:

curl -XPUT 'http://10.118.192.165:9200/matches/tags_nested/_mapping' -d '
{
"tags_nested":{
"properties":{
"name": {
"type": "string"
},
"total_runs": {
"type": "integer"
},
"matches_played": {
"type": "string"
},
"highest_score": {
"type": "string"
},
"tags": {
"type" : "nested"
}

}
}
}'

the data inserted is :

curl XPUT 'http://10.118.192.165:9200/matches/tags_nested/1' -d'
{
"name" : "sachin",
"total_runs" : "500",
"matches_played" : "4",
"highest_score" : "200*",
"tags" :[
{
"user" : "kuwar",
"tag" : "master blaster"
},
{
"user" : "nipun",
"tag" : "world class"
},
{
"user" : "mayank",
"tag" : "200 not out"
}
]

}'

curl XPUT 'http://10.118.192.165:9200/matches/tags_nested/2' -d'
{
"name" : "hayden",
"total_runs" : "300",
"matches_played" : "4",
"highest_score" : "110",
"tags" :[
{
"user" : "kuwar",
"tag" : "good knock"
},
{
"user" : "nipun",
"tag" : "match winning"
}
]

}'

I want to find the record where the user "kuwar" has a tag "master blaster" . Have designed the following query but it does not give me the result.

curl -XGET 'http://10.118.192.165:9200/matches/tags_nested/_search?pretty=true' -d '
{
"query": {
"nested": {
"path": "tags",
"query":{
"filtered": {
"query": { "match_all": {}},
"filter": {
"and": [
{"term": {"tags.user": "kuwar"}},
{"term": {"tags.tag": "master blaster"}}
]
}
}
}
}
}
}'

the query does not give me the result. however if i change tags.tag to "master" instead of "master blaster" the output comes.

how to solve this problem ?
thanks in advance.

--
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.
For more options, visit https://groups.google.com/groups/opt_out.

--
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.
For more options, visit https://groups.google.com/groups/opt_out.

--
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.
For more options, visit https://groups.google.com/groups/opt_out.

Hello,

The query with "master blaster" does not match with your documents because,
your field tags.tag is by default tokenised during the indexation but the
term filter does not analyze its searched term.

You should configure in your mapping, the field tags.tag with the option
"index":"not_analyzed".

I hope it can help you.

Benjamin

On Wed, Mar 13, 2013 at 7:26 AM, kuwar sahani kuwarsahani@gmail.com wrote:

Hi

I've created the following Index and mapping :

Index : curl -XPUT 'http://10.118.192.165:9200/matches'

Mapping:

curl -XPUT 'http://10.118.192.165:9200/matches/tags_nested/_mapping' -d '
{
"tags_nested":{
"properties":{
"name": {
"type": "string"
},
"total_runs": {
"type": "integer"
},
"matches_played": {
"type": "string"
},
"highest_score": {
"type": "string"
},
"tags": {
"type" : "nested"
}

}
}
}'

the data inserted is :

curl XPUT 'http://10.118.192.165:9200/matches/tags_nested/1' -d'
{
"name" : "sachin",
"total_runs" : "500",
"matches_played" : "4",
"highest_score" : "200*",
"tags" :[
{
"user" : "kuwar",
"tag" : "master blaster"
},
{
"user" : "nipun",
"tag" : "world class"
},
{
"user" : "mayank",
"tag" : "200 not out"
}
]

}'

curl XPUT 'http://10.118.192.165:9200/matches/tags_nested/2' -d'
{
"name" : "hayden",
"total_runs" : "300",
"matches_played" : "4",
"highest_score" : "110",
"tags" :[
{
"user" : "kuwar",
"tag" : "good knock"
},
{
"user" : "nipun",
"tag" : "match winning"
}
]

}'

I want to find the record where the user "kuwar" has a tag "master
blaster" . Have designed the following query but it does not give me the
result.

curl -XGET '
http://10.118.192.165:9200/matches/tags_nested/_search?pretty=true' -d '
{
"query": {
"nested": {
"path": "tags",
"query":{
"filtered": {
"query": { "match_all": {}},
"filter": {
"and": [
{"term": {"tags.user": "kuwar"}},
{"term": {"tags.tag": "master blaster"}}
]
}
}
}
}
}
}'

the query does not give me the result. however if i change tags.tag to
"master" instead of "master blaster" the output comes.

how to solve this problem ?
thanks in advance.

--
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.
For more options, visit https://groups.google.com/groups/opt_out.

--
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.
For more options, visit https://groups.google.com/groups/opt_out.