2016-05-15 12 views
0

ユーザーがテキストと地理的な場所でオブジェクトを検索できるようにします。テキストで検索するときは、通常のクエリと補完候補と同様に用語を提案したいと思います。フィルターを適用したクエリに提案者を追加しようとすると、エラーが発生します。助言がありますか?Elasticsearch [フィルタリング]クエリが[提案]をサポートしていません

マイマップ:

curl -XPUT http://localhost:9200/objects/object/_mapping -d '{ 
    "object": { 
    "properties": { 
     "objectDescription": { 
     "type": "string" 
     }, 
     "suggest": { 
     "type": "completion", 
     "analyzer": "standard", 
     "search_analyzer": "standard", 
     "payloads": true 
     } 
    } 
    } 
}' 

curl -X PUT http://localhost:9200/objects/object/_mapping -d '{ 
    "object":{"properties":{"location":{"type":"geo_point"}}} 
}' 

マイサーチ:

{ 
    "query": { 
    "filtered": { 
     "query": { 
     "fuzzy": { 
      "objectDescription": { 
      "value": "burger" 
      } 
     } 
     }, 
     "filter": { 
     "or": [ 
      { 
      "geo_distance": { 
       "distance": "15mi", 
       "location": { 
       "lat": 33.4255104, 
       "lon": -111.94000540000002 
       } 
      } 
      }, 
      { 
      "bool": { 
       "must": [ 
       { 
        "term": { 
        "administrative_area_level_1": "AZ" 
        } 
       }, 
       { 
        "term": { 
        "addressType": "administrative_area_level_1" 
        } 
       } 
       ] 
      } 
      } 
     ] 
     } 
    } 
    } 
} 

私はあなたがフィルターなしで、それは私のフィルタを無視するだろうとクエリと同じレベルで示唆追加

。それは、緯度経度の近くの場所ではない検索されたオブジェクトを検索します。

{ 
    "query":{ 
     "filtered":{ 
      "query":{ 
       "fuzzy":{ 
        "objectDescription":{"value":"bears"} 
       } 
      }, 
      "filter":{ 
       "bool":{ 
        "should":[ 
         { 
          "geo_distance":{ 
           "distance":"15mi", 
           "location":{ 
            "lat":43.6187102, 
            "lon":-116.21460680000001 
           } 
          } 
         }, 
         { 
          "bool":{ 
           "must":[ 
            { 
             "term":{"administrative_area_level_1":"ID"} 
           },{ 
             "term":{"addressType":"administrative_area_level_1"} 
            } 
           ] 
          } 
         } 
        ] 
       } 
      } 
     } 
    }, 
    "suggest":{ 
     "object-suggest":{ 
      "text":"bears", 
      "completion":{ 
       "field":"suggest", 
       "fuzzy":{"fuzziness":2} 
      } 
     } 
    } 
} 

質問の代わりに本文の示唆部分を配置すると、このエラーが発生します。

{ 
    "query":{ 
     "filtered":{ 
      "suggest":{ 
       "object-suggest":{ 
        "text":"bears", 
        "completion":{ 
         "field":"suggest", 
         "fuzzy":{"fuzziness":2} 
        } 
       } 
      }, 
      "filter":{ 
       "bool":{ 
        "should":[ 
         { 
          "geo_distance":{ 
           "distance":"15mi", 
           "location":{ 
            "lat":43.6187102, 
            "lon":-116.21460680000001 
           } 
          } 
         }, 
         { 
          "bool":{ 
           "must":[ 
            { 
             "term":{"administrative_area_level_1":"ID"} 
           },{ 
             "term":{"addressType":"administrative_area_level_1"} 
            } 
           ] 
          } 
         } 
        ] 
       } 
      } 
     } 
    } 
} 

だから私の問題は、私はelastic.co上または完了SUGGESTORで検索ジオロケーションの組み合わせを持っているStackOverflowの上で例を発見していないです。

+0

エラーが発生するクエリは、その中には示唆がないので、確実ですか? – Val

+0

こんにちは!申し訳ありませんが、エラーを出していた実際のボディを含めずに、自分のコードスニペットを整理してくれてありがとう。私はこの問題にフィルタの質問を含めることを提案した。私の目標は、ジオロケーションフィルタを使用して、提案者のテキストを検索することです。見ていただきありがとうございます! –

答えて

1

このようにしてください。のではなく、あなたの正確なユースケースについては

{ 
    "query": { 
    "filtered": { 
     "filter": { 
     "bool": { 
      "should": [ 
      { 
       "geo_distance": { 
       "distance": "15mi", 
       "location": { 
        "lat": 43.6187102, 
        "lon": -116.21460680000001 
       } 
       } 
      }, 
      { 
       "bool": { 
       "must": [ 
        { 
        "term": { 
         "administrative_area_level_1": "ID" 
        } 
        }, 
        { 
        "term": { 
         "addressType": "administrative_area_level_1" 
        } 
        } 
       ] 
       } 
      } 
      ] 
     } 
     } 
    } 
    }, 
    "suggest": { 
    "object-suggest": { 
     "text": "bears", 
     "completion": { 
     "field": "suggest", 
     "fuzzy": { 
      "fuzziness": 2 
     } 
     } 
    } 
    } 
} 

UPDATE

、私はあなたがジオロケーションのコンテキストでcontext suggesterを使うべきだと思う:suggestブロックは、独自の最上位に行きます簡単な完了suggester。それはあなたが期待するものを達成するために必要なものです。

+0

トップレベルで提案を追加すると、geo_distanceフィルタが無視されるようです。熊オブジェクトは、テネフ、AZの緯度経度を持ちます。私がテンペ(AZ)の15mi内を検索すると、オブジェクトが返されます。私がBoiseの15mi内を検索すると、IDは同じオブジェクトが返されます。私が提案し、geo_distanceフィルタだけを使用しないとき、それは期待どおりに動作します。オブジェクトはTempe lat lngでは返され、Boise lat lngでは返されません。 –

+0

geo_distanceフィルタが絶対に必要な場合は、なぜそれを 'bool/should'に追加しますか?それは 'bool/must'にあるはずです、そうですか? – Val

+0

私は希望されたlat lngのオブジェクトと、この場合のlat lngの "親"を状態として返したいと思います。ですから、この緯度経度の15mi以内のすべてのオブジェクトと、その状態にあり、州内の特定の場所を持たないすべての結果を与えてください。それがすべきである理由です。 –

関連する問題