Uncertain how to properly filter when certain fields do not always exist


(Phil Barresi) #1

I am trying to filter based on a field that, on some objects, does not
exist. I was under the impression that ES would match objects that don't
have that field.

Ultimately, I am trying to filter as such:

  • Field A will always exist, and should match on any of tags 1,2,3
  • When it exists, either Field B or C must match any of tags 5,6,7
  • When it exists, Field B must match any of tags 10, 11, 12
  • When it exists, Field B or C must NOT have any of tags 15, 16, 18.

In this case, all my tags are strings. In addition, fields B and C are
inside of another. I am uncertain if that matters.

Essentially, my object is:

{ a: ["some", "tags", "here"],
X : {
B: ["more", "tags", "here"],
C: ["even", "more", "here"]
}
}

Ultimately, I am trying to build a whitelist and blacklist filtering system.

However, when filtering this way, I do not get any results that do not
contain field X.

How do I properly format this filter?

--
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/754097d9-fff7-4773-bac4-54f4fe3e5172%40googlegroups.com.
For more options, visit https://groups.google.com/groups/opt_out.


(Phil Barresi) #2

Following advice I've receivedhttp://stackoverflow.com/questions/21005516/uncertain-how-to-properly-filter-when-certain-fields-do-not-always-existfrom StackOverflow poster Sloan Ahrens, I made a
test http://sense.qbox.io/gist/8f7369e7991db56f7b1592f11245cb8bf6dc933f that
worked on a test index, but not on a main index. However, I was getting
false matches.

I've added my index settings http://sense.qbox.io/gist/a73c74e71df4aca6c58283bca1cde6e6071644dfand
found that somehow, the addition of the relatedProfiles mapping makes it so
that I get false-hits. Can anyone explain why that is?

On Thursday, January 9, 2014 10:17:29 AM UTC-5, Phil Barresi wrote:

I am trying to filter based on a field that, on some objects, does not
exist. I was under the impression that ES would match objects that don't
have that field.

Ultimately, I am trying to filter as such:

  • Field A will always exist, and should match on any of tags 1,2,3
  • When it exists, either Field B or C must match any of tags 5,6,7
  • When it exists, Field B must match any of tags 10, 11, 12
  • When it exists, Field B or C must NOT have any of tags 15, 16, 18.

In this case, all my tags are strings. In addition, fields B and C are
inside of another. I am uncertain if that matters.

Essentially, my object is:

{ a: ["some", "tags", "here"],
X : {
B: ["more", "tags", "here"],
C: ["even", "more", "here"]
}
}

Ultimately, I am trying to build a whitelist and blacklist filtering
system.

However, when filtering this way, I do not get any results that do not
contain field X.

How do I properly format this filter?

--
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/0951fad9-32d5-4ab8-801a-619ab4201030%40googlegroups.com.
For more options, visit https://groups.google.com/groups/opt_out.


(system) #3