我是彈性搜索的新手,我正在使用現有的基礎設施,我試圖了解我的查詢出了什么問題,因為我沒有收到任何結果。
我有以下型號 -
X = {
"id" : "string",
"name" : "string",
"hidden" : boolean,
"description" : "string",
"status" : "string",
"type" : "string"
}
我正在嘗試創建一個排除結果的條件 - 在“must_not”下,我創建了一個布爾查詢,該查詢具有包含 3 個術語的“必須”。
我想要實作的偽代碼 -
IF X.id IN [] AND x.hidden == true AND x.status == "FINISHED" THEN 不得分——僅當滿足整個條件時。
即使我有應該回傳的資料,我什么也沒有收到。任何協助都會很棒。謝謝。
詢問 -
{
"bool" : {
"must" : [
{
"multi_match" : {
"query" : "{phrase}",
"fields" : [
"searchData.body*^1.0",
"searchData.description*^3.0",
"searchData.name*^4.0",
"searchData.taskBody*^1.0",
"searchData.topics^2.0"
],
"type" : "best_fields",
"operator" : "OR",
"slop" : 0,
"prefix_length" : 0,
"max_expansions" : 50,
"zero_terms_query" : "NONE",
"auto_generate_synonyms_phrase_query" : true,
"fuzzy_transpositions" : true,
"boost" : 1.0
}
}
],
"filter" : [
{
"terms" : {
"context.X.id" : [
"04cb64b5-bf28-4e04-a7f1-6f93a8caa10c",
"368bf798-5ec7-4f73-904e-ec22818c4f6b",
"8ccb61ab-364a-4303-b21f-e930bb8b8071",
"7675e70a-1216-49d5-915c-a3c3f919a1bf",
"c9d976d8-bbe3-44db-9d97-5fafc4af0d3f",
"234f9f61-69fe-41e8-89e8-a5c2c4e99e0a",
"c0a813e6-4e32-4993-a53f-bb16b16ef976",
"261da1c2-edc5-4f51-807e-603fe9d9712a",
"dc2d1e94-6653-420c-96ce-bccdd7e187f1",
"zzzzzzzz-xxxx-4e04-a7f1-yyyyyyyyyyyy",
"xxxxxxxx-bf28-yyyy-a7f1-kkkkkkkkkkkk",
"yyyyyyyy-bf28-4e04-a7f1-mmmmmmmmmmmm",
],
"boost" : 1.0
}
}
],
"must_not" : [
{
"bool" : {
"must" : [
{
"term" : {
"context.X.id" : {
"value" : [
"04cb64b5-bf28-4e04-a7f1-6f93a8caa10c",
"368bf798-5ec7-4f73-904e-ec22818c4f6b",
"8ccb61ab-364a-4303-b21f-e930bb8b8071",
"7675e70a-1216-49d5-915c-a3c3f919a1bf",
"c9d976d8-bbe3-44db-9d97-5fafc4af0d3f",
"234f9f61-69fe-41e8-89e8-a5c2c4e99e0a",
"c0a813e6-4e32-4993-a53f-bb16b16ef976",
"261da1c2-edc5-4f51-807e-603fe9d9712a",
"dc2d1e94-6653-420c-96ce-bccdd7e187f1"
],
"boost" : 1.0
}
}
},
{
"term" : {
"context.X.status" : {
"value" : "FINISHED",
"boost" : 1.0
}
}
},
{
"term" : {
"context.X.hidden" : {
"value" : true,
"boost" : 1.0
}
}
}
],
"adjust_pure_negative" : true,
"boost" : 1.0
}
}
],
"adjust_pure_negative" : true,
"boost" : 1.0
}
}
編輯:
映射:
"X": {
"properties": {
"id": {
"type": "keyword",
"normalizer": "id_normalizer"
},
"description": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
},
----------------------------------before edit
"hidden": {
"type": "boolean"
},
----------------------------------
----------------------------------after edit
"hidden": {
"type": "boolean",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
},
----------------------------------
"name": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
},
"status": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
},
"type": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
}
}
}
uj5u.com熱心網友回復:
感謝@ilvar 引起了我對keyword定義的關注,我注意到該status欄位被定義為text.
該欄位正在從Status列舉中獲取其值,并且正在保存該列舉的字串表示形式。
由于某種原因,直到我搜索X.status.keyword路徑才回傳結果(ES檔案提到一個欄位的型別keyword不明確,因此它可以是多種型別)
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/413762.html
標籤:
