我從我的用戶那里得到一個代表彈性請求的字串。可以有以下型別的請求:
單項:TERM:MATCH_TERM
;
用AND分隔的幾個術語:TERM:MATCH_TERM AND TERM:MATCH_TERM AND TERM:MATCH_TERM
;
由OR分隔的幾個術語:TERM:MATCH_TERM OR TERM:MATCH_TERM OR TERM:MATCH_TERM
;
由AND和OR分隔的幾個TERM:MATCH_TERM AND TERM:MATCH_TERM OR TERM:MATCH_TERM AND TERM:MATCH_TERM OR TERM:MATCH_TERM AND TERM:MATCH_TERM
術語:
OR
操作員優先于操作AND
員
接下來我決議這個字串并得到我的不同術語的串列。
我現在想使用這個串列來構建我的彈性查詢。我知道我將不得不使用復雜查詢的語法:bool
. (我使用 elastic 的 javascript 客戶端提出我的請求)
據我了解,must
過濾器將允許我執行AND過濾器should
將允許我執行OR。
在我們有的情況下TERM1:MATCH_TERM1 AND TERM2:MATCH_TERM2 OR TERM3:MATCH_TERM3 AND TERM4:MATCH_TERM4 OR TERM5:MATCH_TERM5 AND TERM6:MATCH_TERM6
:
正確的語法是這樣的:
"query":{
"bool":{
"should":[
"must":[
{"terms":{"TERM1":"MATCH_TERM1"}}
] ,
"must":[
{"terms":{"TERM2":"MATCH_TERM2"}}
] ,
],
"should":[
"must":[
{"terms":{"TERM3":"MATCH_TERM3"}}
] ,
"must":[
{"terms":{"TERM4":"MATCH_TERM4"}}
] ,
],
"should":[
"must":[
{"terms":{"TERM5":"MATCH_TERM5"}}
] ,
"must":[
{"terms":{"TERM6":"MATCH_TERM6"}}
] ,
],
}
}
如果缺少任何資訊來回答我的問題,請告訴我,我會盡快添加。
如果您花時間幫助我,請提前感謝您。
uj5u.com熱心網友回復:
{
"query": {
"bool": {
"should": [
{
"bool": {
"filter": [
{
"terms": {
"TERM1": [
"MATCH_TERM1"
]
}
},
{
"terms": {
"TERM2": [
"MATCH_TERM2"
]
}
}
]
}
},
{
"bool": {
"filter": [
{
"terms": {
"TERM3": [
"MATCH_TERM3"
]
}
},
{
"terms": {
"TERM4": [
"MATCH_TERM4"
]
}
}
]
}
},
{
"bool": {
"filter": [
{
"terms": {
"TERM5": [
"MATCH_TERM5"
]
}
},
{
"terms": {
"TERM6": [
"MATCH_TERM6"
]
}
}
]
}
}
],
"minimum_should_match": "1"
}
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/498376.html
標籤:javascript 弹性搜索 筛选 要求 弹性堆栈