尋求幫助為以下用例制定查詢。我有一個文本欄位和一個整數欄位,它是一個 ID。我需要搜索匹配的文本,但希望回應包含與 ID 之一匹配的結果。例如,我有兩個欄位。一種是產品 ID,它是文本。以及一個整數的所有者 ID。必須允許所有者僅查看他們擁有的那些產品。此外,一個所有者可以有多個 ID。
Elasticsearch 中的示例記錄:
{
"product": "MKL89ADH12",
"ownerId" : 98765
},
{
"product": "POIUD780H",
"ownerId" : 12345
},
{
"product": "UJK87TG89",
"ownerId" : 98765
},
{
"product": "897596YHJ",
"ownerId" : 98765
},
{
"product": "LKGGN764HH",
"ownerId" : 784512
}
如果 98765 和 12345 屬于同一所有者,則他們應該只能查看前 4 個產品。如果他們搜索 ,則不應回傳任何結果LKGGN764HH 。
我嘗試了以下查詢,但它沒有給我任何結果。
{
"size": 24,
"query": {
"bool": {
"must":[{
"match" : {
"product": {
"query": "MKL89ADH12"
}
}
},
{
"match" : {
"product": {
"query": "LKGGN764HH"
}
}
},
{
"terms": {
"ownerId": [98765, 12345],
"boost": 1.0
}
}
]
}
}
}
我期望包含回應,MKL89ADH12因為我正在按 ownerId 進行過濾。尋求幫助為我的用例制定正確的查詢。
uj5u.com熱心網友回復:
您需要過濾 "ownerId": [98765, 12345] 然后使用 "should" 子句回傳匹配任何文本的檔案。
{
"size": 24,
"query": {
"bool": {
"filter": [
{
"terms": {
"ownerId": [
98765,
12345
],
"boost": 1
}
}
],
"should": [
{
"match": {
"product": {
"query": "MKL89ADH12"
}
}
},
{
"match": {
"product": {
"query": "LKGGN764HH"
}
}
}
],
"minimum_should_match": 1
}
}
}
以上查詢將轉換為
select * from index
where ownerid in ( 98765, 12345)
AND (product IN ("MKL89ADH12","LKGGN764HH))
而你的作品就像
select * from index
where ownerid in ( 98765, 12345)
AND product = "MKL89ADH12"
AND product = "LKGGN764HH"
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/343272.html
標籤:弹性搜索
