2017-05-24 75 views
0

此使用是一個代碼Elasticsearch含義必須multimatch

GET /news/_search 
{ 
    "query": { 
    "bool": { 
    "must": [ 
     { 
      "multi_match": { 
       "query": "France and Luxembourg", 
       "fields": [ 
       "stkno", 
       "tag", 
       "content", 
       "htext" 
       ], 
       "operator": "and" 
      } 
     }, 
     { 
      "range": { 
       "CDate": { 
       "gt": "2017-05-23T14:02:11", 
       "lte": "2017-05-24T23:59:59" 
       } 
      } 
     } 
    ] 
    } 
}, 
    "from": 0, 
     "size": 100, 
    "sort": [ 
    { 
    "CDate": { 
     "order": "desc" 
    } 
    } 
    ] 
} 

使用上面的命令後,打總爲2分的記錄。但其中一個確切地說'法國和盧森堡',另外一個'法國'。

我的問題如下:

  1. 已經使用了「必須」,爲什麼沒有隻顯示確切詞「法國和盧森堡」?
  2. 運營商的目的是什麼?我已經讀過elasticsearch,但真的不明白,你能解釋一下嗎?

重新編輯:

我一直在使用如下編碼嘗試,但結果變成空的。 enter code here

POST _search 
{ 
    "query": { 
    "bool": { 
    "should": [ 
     { 
      "term": { 
       "stkno": "France and Luxembourg" 
      } 
     }, 
     { 
      "term": { 
       "tag": "France and Luxembourg" 
      } 
     }, 
     { 
      "term": { 
       "context": "France and Luxembourg" 
      } 
     }, 
     { 
      "term": { 
       "htext": "France and Luxembourg" 
      } 
     } 
    ], 
    "minimum_should_match": 1 
    } 
    } 
    } 

感謝...

回答

0

如前所述here,當您使用multi-matchand運營商來說,是場多比賽。因此您的查詢變爲

(+stkno:France +stkno:and +stkno:Luxembourg) 
| (+tag:France +tag:and +tag:Luxembourg) 
| (+context:France +context:and +context:Luxembourg) 
| (+htext:France +htext:and +htext:Luxembourg) 

對於完全匹配,您可以使用term query

您可以單獨更改multi-match段到另一個布爾查詢

     { 
          "bool": { 
           "should": [ 
            { 
             "term": { 
              "stkno": "France and Luxembourg" 
             } 
            }, 
            { 
             "term": { 
              "tag": "France and Luxembourg" 
             } 
            }, 
            { 
             "term": { 
              "context": "France and Luxembourg" 
             } 
            }, 
            { 
             "term": { 
              "htext": "France and Luxembourg" 
             } 
            } 
           ], 
           "minimum_should_match": 1 
          } 
         } 
+0

我已經試過您的建議編碼..但我不能讓我的結果。總命中數爲0。我將複製elasticsearch值時,它仍然無法找到 –

+0

編碼太長,我不能在這裏 –

+0

貼上編碼,如:POST _search { 「查詢」:{ 「布爾」:{ 「應「:[ {請按照上面的代碼進行編碼)}} –

相關問題