Skane
(Skane)
May 17, 2018, 5:11am
1
初めまして、Nested datatypeの要素から条件に合致したドキュメントを引っ張ってくるクエリ方法で困ったことがございます。
下記のようにnestedを利用したmappingを登録したとします。
"mappings": {
"topics" : {
"properties" : {
"item_id" : {
"type" : "keyword"
},
"publish" : {
"type" : "nested",
"properties" : {
"id" : {
"type" : "integer"
},
....
}
},
....
}
}
}
これに対して、
{
"item_id" : 1,
"publish" : [
{"id" : 1, ...},
{"id" : 2, ...}
]
}
と
{
"item_id" : 2,
"publish" : [
{"id" : 1, ...}
]
}
を2件ドキュメントを登録したとします。
この2件に対して、publish.id = 2が 存在しないドキュメントを検索するクエリはありますでしょうか?
クエリ結果の期待値としては、
{
"item_id" : 1,
"publish" : [
{"id" : 1, ...},
{"id" : 2, ...}
]
}
のみ結果として取得できたらと思っております。
tsgkdt
(tsgkdt)
May 17, 2018, 7:07am
2
期待値に「publish.id=2」は含まれているように見えますが、
{
"item_id" : 1,
"publish" : [
{"id" : 1, ...},
{"id" : 2, ...} ← ここ
]
}
この2件に対して、publish.id = 2が 存在しないドキュメントを検索するクエリはありますでしょうか?
publish.id=2(ネストされたオブジェクトで特定の値)を含むものだけを検索したい、ということなのでしょうか?
あるいは、「publish.id=2が存在しない」ということ期待されているのであれば、検索結果としての
期待値としては、item_idは2になるのでは? という確認です。
Skane
(Skane)
May 17, 2018, 7:12am
3
大変失礼いたしました。
期待値に誤りがございました。
publish.id = 2が存在しない場合なので、期待値は下記となります。
{
"item_id" : 2,
"publish" : [
{"id" : 1, ...}
]
}
johtani
(Jun Ohtani)
May 17, 2018, 3:28pm
4
publish.id = 2のクエリをbool のmust_notに入れれば良いかと。
tsgkdt
(tsgkdt)
May 18, 2018, 12:01am
5
johaniさんが書いている内容で、期待する結果が取れることを確認できました。
{
"query": {
"bool": {
"must_not": [
{
"nested": {
"path": "publish",
"query": {
"match": {
"publish.id": 2
}
}
}
}
]
}
}
}
※ mappingについては、提示されたものを利用
Skane
(Skane)
May 18, 2018, 4:19am
6
頂いたクエリをこちらでも試し、解決しました。
ありがとうございました!
system
(system)
Closed
June 15, 2018, 4:19am
7
This topic was automatically closed 28 days after the last reply. New replies are no longer allowed.