joa
(joa)
September 17, 2013, 11:51am
1
Hi, my I am using the following mapping for a flexible metadata structure
(k = key/name, i = integer values, s = string values):
{
"my_index" : {
"my_type" : {
"properties" : {
"metadata" : {
"type" : "nested",
"properties" : {
"i" : {
"type" : "integer"
},
"k" : {
"type" : "string"
},
"s" : {
"type" : "string"
}
}
}
}
}
}
}
Here is how sample data might look like:
{
"metadata": [
{
"k": "autor",
"s": "Arlene Franklin"
},
{
"k": "year1",
"i": 2001
},
{
"k": "year2",
"i": 2013
}
]
}
I am now trying to do queries like: All docs where year1 greater 1990 AND
where autor is "Arlene Franklin".
I've tried the following without success (query works, but I got no hits):
{
"query": {
"filtered": {
"query": {
"match_all": {}
},
"filter": {
"nested": {
"path": "metadata",
"query": {
"filtered": {
"filter": {
"and": [
{
"and": [
{
"term": {
"metadata.k": "year1"
}
},
{
"range": {
"metadata.i": {
"gt": 1990
}
}
}
]
},
{
"and": [
{
"term": {
"metadata.k": "autor"
}
},
{
"term": {
"metadata.s": "Arlene Franklin"
}
}
]
}
]
}
}
}
}
}
}
}
}
Is my mapping working at all for queries like this? Thanks!
--
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 .
mvg
(Martijn Van Groningen)
September 17, 2013, 1:43pm
2
The use of the nested seems correct. Can you try to change the term
filter into a match
query that is wrapped a query
filter?
The term filter (and query) doesn't take query time text analysis into
account, the match query does. ("Arlene Franklin" is handled at a single
token while it should be handled as ["arlene", "franklin"], so is also how
a string field is indexed as default).
On 17 September 2013 13:51, joa joafeldmann@gmail.com wrote:
Hi, my I am using the following mapping for a flexible metadata structure
(k = key/name, i = integer values, s = string values):
{
"my_index" : {
"my_type" : {
"properties" : {
"metadata" : {
"type" : "nested",
"properties" : {
"i" : {
"type" : "integer"
},
"k" : {
"type" : "string"
},
"s" : {
"type" : "string"
}
}
}
}
}
}
}
Here is how sample data might look like:
{
"metadata": [
{
"k": "autor",
"s": "Arlene Franklin"
},
{
"k": "year1",
"i": 2001
},
{
"k": "year2",
"i": 2013
}
]
}
I am now trying to do queries like: All docs where year1 greater 1990 AND
where autor is "Arlene Franklin".
I've tried the following without success (query works, but I got no hits):
{
"query": {
"filtered": {
"query": {
"match_all": {}
},
"filter": {
"nested": {
"path": "metadata",
"query": {
"filtered": {
"filter": {
"and": [
{
"and": [
{
"term": {
"metadata.k": "year1"
}
},
{
"range": {
"metadata.i": {
"gt": 1990
}
}
}
]
},
{
"and": [
{
"term": {
"metadata.k": "autor"
}
},
{
"term": {
"metadata.s": "Arlene Franklin"
}
}
]
}
]
}
}
}
}
}
}
}
}
Is my mapping working at all for queries like this? Thanks!
--
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 .
--
Met vriendelijke groet,
Martijn van Groningen
--
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 .
joa
(joa)
September 17, 2013, 1:48pm
3
Hi Martijn, thanks. I'll try that. But even working with two range queries
returns no hits:
{
"query": {
"filtered": {
"query": {
"match_all": {}
},
"filter": {
"nested": {
"path": "metadata",
"query": {
"filtered": {
"filter": {
"and": [
{
"and": [
{
"term": {
"metadata.k": "year1"
}
},
{
"range": {
"metadata.i": {
"gt": 1990
}
}
}
]
},
{
"and": [
{
"term": {
"metadata.k": "year2"
}
},
{
"range": {
"metadata.i": {
"lt": 2020
}
}
}
]
}
]
}
}
}
}
}
}
}
}
--
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 .
joa
(joa)
September 17, 2013, 1:59pm
4
Should I replace all term filters or only the one used by the autor ("metadata.s":
"Arlene Franklin") ? If you mean all term filters, it the following as you
suggested?
...
"and": [
{
"query": {
"match": {
"metadata.k": "year1"
}
}
},
{
"range": {
"metadata.i": {
"gt": 1990
}
}
}
]...
--
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 .
mvg
(Martijn Van Groningen)
September 17, 2013, 2:10pm
5
Only change the term filter with: ("metadata.s": "Arlene Franklin")
Also I think you need to change to top level and
filter in the second
filtered query in a or
filter, because there is no inner nested object
with year1 AND year2.
On 17 September 2013 15:59, joa joafeldmann@gmail.com wrote:
Should I replace all term filters or only the one used by the autor ("metadata.s":
"Arlene Franklin") ? If you mean all term filters, it the following as
you suggested?
...
"and": [
{
"query": {
"match": {
"metadata.k": "year1"
}
}
},
{
"range": {
"metadata.i": {
"gt": 1990
}
}
}
]...
--
Met vriendelijke groet,
Martijn van Groningen
--
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 .
joa
(joa)
September 17, 2013, 2:36pm
6
I am not sure if I get you right, but changing any of the "and"s to an "or"
will lead to different results: I really want to get only documents, where
e.g. year1=2004 AND year2=2006. I think using an or filter would change my
results?
As this is not a productive environment I can also change my mapping, if
you think the current is not optimal for this. Thanks again.
--
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 .
johtani
(Jun Ohtani)
September 17, 2013, 4:02pm
7
Hi
This query is right?
I try to send sevral pattern query.
Sorry, I don't know different between this query and your query...
{
"explain": true,
"query": {
"filtered": {
"query": {
"match_all": {}
},
"filter": {
"and": [
{
"nested": {
"path": "metadata",
"query": {
"filtered": {
"filter": {
"and": [
{
"term": {
"metadata.k": "year1"
}
},
{
"range": {
"metadata.i": {
"gt": 1990
}
}
}
]
}
}
}
}
},
{
"nested": {
"path": "metadata",
"query": {
"filtered": {
"filter": {
"and": [
{
"term": {
"metadata.k": "autor"
}
},
{
"query": {
"match": {
"metadata.s": "Arlene Franklin"
}
}
}
]
}
}
}
}
}
]
}
}
}
}
2013/9/17 joa joafeldmann@gmail.com
I am not sure if I get you right, but changing any of the "and"s to an
"or" will lead to different results: I really want to get only documents,
where e.g. year1=2004 AND year2=2006. I think using an or filter would
change my results?
As this is not a productive environment I can also change my mapping, if
you think the current is not optimal for this. Thanks again.
--
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 .
--
Jun Ohtani
blog : http://blog.johtani.info
--
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 .
joa
(joa)
September 17, 2013, 4:22pm
8
Hi Jun,
your query works, thanks! Including nested": { "path": "metadata" } mutiple
times like you did solved it. I wonder if there a are more elegant ways to
write this?
--
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 .
johtani
(Jun Ohtani)
September 18, 2013, 3:11am
9
Hi
I wonder if there a are more elegant ways to write this?
Sorry, I don't know elegant way.
Maybe "path" field is need to each filter, because "nested" filter requires "path" field.
Jun Ohtani
twitter : http://twitter.com/johtani
On 2013/09/18, at 1:22, joa joafeldmann@gmail.com wrote:
Hi Jun,
your query works, thanks! Including nested": { "path": "metadata" } mutiple times like you did solved it. I wonder if there a are more elegant ways to write this?
--
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 .