0

ElasticSearchの新機能で、条件付きクエリ/フィルタを作成する方法があるかどうかは疑問でした。私はRailsに取り組んでいるので、ESレベルで条件付きクエリを指すものを見つけることができなかったので、その特定のレベルになければならないと思います。だからここElasticSearch 5.x(elasticsearch-rails/elasticsearch-model)の条件付きクエリ

は、私が持っている(作業)クエリです:

search_definition = { 
     query: { 
      bool: { 
       must: [ 
        { 
         more_like_this: { 
          fields: tag_types, 
          docs: [ 
           { 
            _index: self.class.index_name, 
            _type: self.class.document_type, 
            _id: id 
           } 
          ], 
          min_term_freq: 1 
         } 
        } 
       ], 
       should: [ 
        range: { 
         age: { 
          gte: min_age, 
          lte: max_age, 
          boost: 4.0 
         } 
        } 
       ], 
       filter: { 
        bool: { 
         must: [ 
          term: { 
           active: true 
          } 
         ], 
         must: [ 
          geo_distance: { 
           distance: xdistance, 
           unit: "km", 
           location: { 
            lat: xlat, 
            lon: xlng 
           }, 
           boost: 5.0 
          } 
         ] 
        } 
       } 
      } 
     }, 
     size: how_many 
    } 

そして、それは完全に正常に動作します。ここでは追加のフィルタを適用したいと考えてみましょう。この特定の例では、検索しているユーザー、他のユーザーのユーザーが実際に検索しているユーザーの性別を探していることを確認する必要があります。これは、データベース内の2つの別々のブール属性(男性/女性)で保持されます。 2つの同様のフィルタを準備するだけでも簡単だと思っていましたが、クエリには条件フィルタがいくつか追加されていました。よりエレガントな方法が必要です!ありがとうございました!

答えて

1

elasticsearch search templatesに精通していますか?
検索テンプレートを使用すると、conditionaldynamicのクエリを使用できます。たとえば、用語をフィルタリングし、それをパラメータとして検索テンプレートに渡すためのフィールドと値のリストを持つことができます。

+0

これは本当に面白そうです。私は昨日、JBuilderをRailsでセットアップし始めました。それは幾分か機能するには年齢がかかりました - だから、当分の間はそれに固執して今後のテンプレートを探求してください:)誰かがこれを読んでいるかもしれません - 複雑になるJBuilderは必ずしも楽しいツールではありません! –

1

Mohammadが提案したように、結局、私の人生を楽にしたES検索テンプレートを使って解決策を追求しました。 JBuilder、ElasticSearch-DSLなどのソリューションの問題は、最新のESで動作しないように見えることです。その後、宝石やESのバージョンを変更する必要があるかどうかはわかりません。だから、真ん中の人間を切り抜いて、実際に作成しやすいテンプレートで完全にコントロールすることは、私にとって意味のあるものでした。 JBuilderとES-DSLで設定したバージョンは、出力が最大でもランダムであったため正しく機能しませんでした。

検索テンプレート - >More Information

のJBuilder - >More Information

ElasticSearch-DSL - >More Information

私は試していないが、検索テンプレートで、私は」didnの他のソリューションがあります。それが必要なのか分かりません。