LARVERSEACHを使用したLaravelでの検索クエリの背後にあるロジック -- php フィールド と mysql フィールド と search フィールド と laravel フィールド と None フィールド 関連 問題

Logic behind search query in Laravel using Elasticsearch












3
vote

問題

日本語

テーブル/タイプを検索するためにElasticsearchと共にLaravelを使用しています。

私は、検索するためにユーザーが使用できる合計5の検索フィルタを持っています。

タイトル(文字列) - タイプ(ブール値) - 州名(int) - 都市名(int) - 価格(int)

だからクエリは31の異なる組み合わせを持つことができます。

ここではelomquent ormのようなものを使うことができないので、ESの各クエリを書く必要があります。

これを行うためのより良い方法はありますか?

または私にこのようなことをさせてくれるいくつかのlarvelパッケージはあります - いくつかの検索パラメータを空のままにして、空の人を拾うだけで撮影してください。

<事前> <コード> 'filtered' => [ 'query' => [ 'match' => ['title' => Input::get('query')] ], 'filter'=> [ 'bool' => [ 'must' => [ ['term' => [ 'type' => 1] ], ['term' => [ 'state' => 22] ], ['term' => [ 'city' => ] ], [ 'range' => [ 'price' => [ 'gte' => , 'lte' => , ] ] ] ] ] ], ],
英語

I am using Laravel together with Elasticsearch in order to search an table/type.

I have a total of 5 search filters that a user can use in order to search.

Title(string) - type(boolean) - state name(int) - city name(int) - price(int)

So the query can have 31 different combinations.

Since I cant use something like Eloquent ORM here I need to write each query for ES.

Is there a better way to do this?

Or is there some Laravel package that would let me do something like this - leave some search parameters empty and only let ES pick up those who arent empty.

'filtered' => [                 'query' => [                     'match' => ['title' => Input::get('query')]                 ],                 'filter'=> [                     'bool' => [                         'must' => [                             ['term' => [ 'type' =>  1] ],                             ['term' => [ 'state' =>  22] ],                             ['term' => [ 'city' => ] ],                             [ 'range' => [                                     'price' => [                                         'gte' => ,                                         'lte' => ,                                     ]                                 ]                             ]                         ]                     ]                 ],             ], 
</div
              
   
   

回答リスト

0
 
vote

elastica

href="http://elastica.io/example/aggregations/terms.html" REL="noFollow"> http://elastica.io/example/aggregations/terms.html < / P>

これはあなたがElasticsearchへの雄弁なようなインターフェースを提供する何かに到達するでしょう。

<事前> <コード> use ElasticaAggregationTerms; use ElasticaQuery; // set up the aggregation $termsAgg = new Terms("genders"); $termsAgg->setField("gender"); $termsAgg->setSize(10); // add the aggregation to a Query object $query = new Query(); $query->addAggregation($termsAgg); // retrieve the results $index = $elasticaClient->getIndex('someindex'); $buckets = $index->search($query)->getAggregation("genders");

のようなクエリを構築するのはこれが終わるでしょう。 <事前> <コード> { "aggs" : { "genders" : { "terms" : { "field" : "gender" }, "size": 10 } } }
 

Have you seen Elastica?

http://elastica.io/example/aggregations/terms.html

This might be the closest you will get to something that provides an Eloquent-like interface to Elasticsearch.

use ElasticaAggregationTerms; use ElasticaQuery;  // set up the aggregation $termsAgg = new Terms("genders"); $termsAgg->setField("gender"); $termsAgg->setSize(10);  // add the aggregation to a Query object $query = new Query(); $query->addAggregation($termsAgg);  // retrieve the results $index = $elasticaClient->getIndex('someindex'); $buckets = $index->search($query)->getAggregation("genders"); 

Which will end up building a query like:

{     "aggs" : {         "genders" : {             "terms" : { "field" : "gender" },             "size": 10         }     } } 
</div
 
 

関連する質問

1  Androidマップv2オファープレイサービス  ( Android maps v2 offer play service ) 
Sucessfull Working Android Maps API V2を持っていますが、Google Playサービスを持っていない場合はテストしようとしました。 だから私はGoogle Playサービスをアンインストールし、私のアプリケーションは今...

0  EclipseのGoogle Play Services Libの赤いマーク  ( Red mark over google play services lib in eclipse ) 
私はSerevalガイドを追跡し、ライブラリフォルダを私のワークスペースにコピーしてからEclipseにインポートした後、Dozenの回数を掃除し、まだこれを続けることができない赤い感嘆符があります。あなたが見ることができるように、binフォルダには.jarが...

28  Elasticsearch Indexを消去する方法  ( How to erase elasticsearch index ) 
My ユニット/統合テスト検索機能のテストを含みます。 私の考えは各テストの前に空の検索インデックスを持つことです。そのため、 setup メソッド(Groovy Code)の索引内のすべての要素を削除しようとしています。 <事前> <コード> Clien...

2  ServiceStack.DataAnnotations属性の定義がありませんか?  ( Servicestack dataannotations missing attributes definitions ) 
Servicestack.DataAnnotationsからServiceStackの属性デコレータを使用しようとしていますが、MSVSオブジェクトブラウザでServicestack.DataAnkotationsネームスペースを表示すると、次の種類がありま...

2  AndroidアプリDaily **アンインストール**、開発者コンソールから計算されていますか?  ( Android app daily uninstalls how is it calculated from developer console ) 
Android開発者コンソールを毎日アンインストールする方法についての考えは? 私のハンチ - gcm ping障害 バックパッケージを除去できるGoogle Playサービスを削除した放送受信機 幅広で非些細な建築ポインターは大幅に感謝されていま...

4  融合場所は時々停止します  ( Fused location sometimes stops ) 
私はユーザーの位置を追跡するアプリに取り組んできました。このために私はGoogle Play Servicesの場所モジュール(A.K.A.融合場所)を使用しました。すべてがすべてうまく機能します。 しかし、時々、完全にランダムな、私はもはやGoogleのロ...

88  あなたのアプリのマニフェストにGoogle Play Servicesのバージョンを追加しますか?  ( Adding google play services version to your apps manifest ) 
私はこのチュートリアルを続けています: https://developers.google.com / MAPS /ドキュメント/ Android / Start#概要 Android SDK内のアプリにGoogleマップを追加する方法について。 唯一の問題...

0  Elasticsearchを使用して1つの文字列に数十万の部分文字を効率的に一致させる方法[閉じる]  ( How to efficiently match hundred thousands of substring in one string using elas ) 
閉鎖。この質問はもっと焦点を絞ったにする必要があります。現在答えを受け付けていません。 この質問を改善したいですか?このPOST...

2  名前でテンプレートをレンダリングする方法?  ( How to render a template by name ) 
私はServiceStack 自己ホストアプリと新しいAPIを登場してください。 同じ名前の2つのビューを別々のフォルダに追加すると、起動時にエラーが発生します。これは許可されていませんか? <事前> <コード> Foo Index.cshtml Bar...

0  ServiceStack AutoQuery機能を使用すると、WSDLに失敗したエラーの自動発生が発生します。  ( Using servicestack autoquery feature causes autogeneration of wsdl failed error ) 
ServiceStackでAutoQuery機能を有効にすると、<コード> Autogeneration of WSDL failed エラーが発生します。 以下の例外が表示されます。 <コード> System.Runtime.Serialization....




© 2022 cndgn.com All Rights Reserved. Q&Aハウス 全著作権所有