2016-06-28 129 views
1

我有三個以下參數,我將通過運行查詢,它們是;彈性搜索我如何查詢多個匹配或功能

  • 查詢 - 無論是地方名稱,描述或空,
  • LAT - 一個地方或空的任緯度,
  • LON - 任的經度放置或空

基於上述參數,我根據query得分查詢items列表,然後計算resultlat, lon之間的距離。

現在,我有以下腳本來獲得基於querydistanceitems;

{ 
    "query": { 
     "function_score": { 
      "query": { 
       "bool": { 
        "must": [{ 
         "multi_match" : { 
          "query": "Lippo", 
          "fields": [ "name^6", "city^5", "country^4", "position^3", "address_line^2", "description"] 
         } 
        }] 
       } 
      }, 
      "functions": [ 
       { 
        "gauss": { 
         "position": { 
          "origin": "-6.184652, 106.7518749", 
          "offset": "2km", 
          "scale": "10km", 
          "decay": 0.33 
         } 
        } 
       } 
      ] 
     } 
    } 
} 

但事實是,如果query是空的,不會有結果的。我想要的是,結果是基於querydistance

無論如何要實現這一目標嗎?任何建議表示讚賞。

回答

2

zero_terms_query選項的多重匹配設置爲all應該允許您在查詢爲空時獲得結果。

例子:

{ 
    "query": { 
     "function_score": { 
      "query": { 
       "bool": { 
        "must": [{ 
         "multi_match" : { 
          "query": "Lippo", 
          "fields": [ "name^6", "city^5", "country^4", "position^3", "address_line^2", "description"], 
          "zero_terms_query" : "all" 
         } 
        }] 
       } 
      }, 
      "functions": [ 
       { 
        "gauss": { 
         "position": { 
          "origin": "-6.184652, 106.7518749", 
          "offset": "2km", 
          "scale": "10km", 
          "decay": 0.33 
         } 
        } 
       } 
      ] 
     } 
    } 
} 
+0

這樣做對我來說..但是,我終於打消了我的'functions'檢查距離。我最終使用了簡單的'query'和'filter'。謝謝 – choz

+0

你也可以發佈^^這個版本。 – kaulmonish