我需要在ElasticSearch的陣列中搜索。我有這樣的檔案
{
"product_name": "iPhone 9",
"功能":[
{
"顏色": "黑色",
"記憶體": "128GB"
},
{
"顏色": "白色",
"記憶體": "64GB"
}
],
},
{
"product_name": "iPhone 9",
"功能":[
{
"顏色": "黑色",
"記憶體": "64GB"
},
{
"顏色": "白色",
"記憶體": "64GB"
}
],
}
我想搜索iphone 9,color = black和memory = 64GB。我正在使用以下查詢
_search?q=product_name: "iPhone 9" AND features.color: "black " AND features.memory: "64GB"
只有檔案中的第二條記錄應該被列出,但是這個查詢顯示了兩條記錄,因為它將color和memory與第一個陣列匹配。我怎樣才能獲得正確的結果呢?
uj5u.com熱心網友回復:
Elasticsearch沒有內部物件的概念。因此,它將物件的層次結構扁平化為一個簡單的欄位名和值的串列。
你的檔案將被內部轉換并存盤為
你的檔案將被內部轉換并存盤為
{
"product_name" : "iPhone 9",
"features.color" : [ "black", "white" ] 。
"features.memory" : ["128GB", "64GB" ] 。
}
顏色和記憶體之間的關聯已經丟失。
如果你需要保持陣列的每個內部物件的獨立性,你需要使用嵌套型別
嵌套型別只能使用嵌套查詢進行查詢。
PUT index-name
{
"mappings": {
"屬性"。{
"特征": {
"型別": "嵌套"
}
}
}
}
PUT index-name/_doc/1
{
"product_name": "iPhone 9",
"功能":[
{
"顏色": "黑色",
"記憶體": "128GB"
},
{
"顏色": "白色",
"記憶體": "64GB"
}
],
}
GET index-name/_search
{
"查詢"。{
"嵌套"。{
"path": "features",
"查詢": {
"bool": {
"必須"。[
{ "match": { "features.color": "black" }},
{ "match": { "features.memory": "64GB" }}.
]
}
}
}
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/315176.html
標籤:
