我必須從專案索引中獲取記錄,條件是欄位“名稱”或“描述”中的任何一個包含“冰箱”,但欄位狀態不包含“-wip”。我已將查詢寫為:
GET items/_search
{
"query": {
"bool": {
"must": {
"multi_match": {
"operator": "or",
"fields": [
"name",
"description"
],
"query": "refrigerator"
}
},
"filter": {
"match": {
"status": [
"-wip"
]
}
}
}
}
}
但它給了我錯誤:
failed to parse field [filter]
似乎“匹配”不起作用。
如何獲取兼容的專案?
uj5u.com熱心網友回復:
在您的“匹配”查詢語法中是錯誤的。
{
"query": {
"bool": {
"must": {
"multi_match": {
"operator": "or",
"fields": [
"name",
"description"
],
"query": "refrigerator"
}
},
"filter": {
"match": {
"status": "-wip" --> remove square bracket
}
}
}
}
}
以上查詢將選擇“status”為“wip/-wip”并且在“name”或“description”中有冰箱的檔案。
要排除狀態為“-wip”的位置,請在關鍵字欄位上使用“must_not”
{
"query": {
"bool": {
"must": {
"multi_match": {
"operator": "or",
"fields": [
"name",
"description"
],
"query": "refrigerator"
}
},
"must_not": [
{
"term": {
"status.keyword": {
"value": "-wip"
}
}
}
]
}
}
}
使用關鍵字欄位是因為“-wip”將被標記為 ["-","wip"] 因此需要完全匹配。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/355905.html
標籤:弹性搜索
