2016-06-28 1 views
1

私は以下の3つのパラメータを持っています。弾性検索どのようにしてマルチマッチングまたはファンクションのいずれかを照会できます

  • クエリから地名、説明または空、 LAT
  • から場所または空のいずれか緯度、
  • LON - の経度いずれ空いているか空いているか

上記のパラメータに基づいて、queryスコアに基づいてitemsのクエリリストを取得し、次にresultlat, lonの間の距離を計算します。

querydistanceに基づいてitemsを取得するスクリプトがあります。

{ 
    "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が空の場合、結果はまったくありません。私が望むのは、結果はqueryまたはdistanceのいずれかに基づいています。

これを達成するにはどうすればよいですか?どんな提案も感謝しています。

答えて

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

関連する問題