我有一個彈性索引,其中包含如下結構的物件:
{
dogs: [
{
name: 'wiener dog',
id: 2,
cats: [
{
name: 'mean cat',
id: 5,
},
...
],
},
...
],
...
}
我的問題是:如何針對該索引搜索包含特定idin的所有檔案cats?單場比賽就好了。
我嘗試了什么:我嘗試了許多不同的查詢,包括嵌套在 上dogs,以及同時嵌套在dogsand上cats。我已經嘗試通過dogs.cats.id,以及上述所有組合直接訪問該屬性。這是 NEST 中的一個示例:
query &= mst.Nested(n => n
.Path("dogs")
.Query(q => q
.Nested(n => n
.Path("dogs.cats")
.Query(q => q
.Terms(t => t
.Field("dogs.cats.id")
.Terms(catIds.ToList())
)
)
)
)
);
我也嘗試過Nested設定Field為cats.id沒有運氣的單曲。
在這里的任何幫助將不勝感激。此時更改資料結構將是一項更大的作業,并且會盡可能避免。謝謝!
uj5u.com熱心網友回復:
根據您的資訊,我認為NestedQuery的使用是理想的。
PUT bug_reports
{
"mappings": {
"properties": {
"dogs": {
"type": "nested",
"properties": {
"cats": {
"type": "nested"
}
}
}
}
}
}
POST bug_reports/_doc/1
{
"dogs": [
{
"name": "wiener dog",
"id": 1,
"cats": [
{
"name":"red cat",
"id": 4
},
{
"name":"mean cat",
"id": 5
}
]
}
]
}
POST bug_reports/_doc/2
{
"dogs": [
{
"name": "none dog",
"id": 2,
"cats": [
{
"name":"mean cat",
"id": 5
}
]
}
]
}
GET bug_reports/_search?filter_path=hits.hits
{
"query": {
"nested": {
"path": "dogs",
"query": {
"bool": {
"must": [
{
"nested": {
"path": "dogs.cats",
"query": {
"terms": {
"dogs.cats.id": [
4
]
}
}
}
},
{
"nested": {
"path": "dogs.cats",
"query": {
"terms": {
"dogs.cats.id": [
5
]
}
}
}
}
]
}
}
}
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/513917.html
標籤:弹性搜索巢
