2016-07-11 7 views
1

私のアプリケーションでElasticsearchを使用して、テーブル内のどこでも一致する単語を検索しています。Elastic search Railsの文字列4

これは私が私の結果をフェッチするために使用しているクエリ文字列です:

search({ query: { prefix: { _all: keywords }}, sort: [ { start_date: 'asc', start_time: 'asc' } ] }) 

選択されたレコードは、次により、アプリケーションで指定した日付範囲(複数可)を一致させるために日付を照会されていましたクエリ:

where("status_id= ? and active=? and (((start_date >= ?) and (start_date <= ?)) 
or ((start_date <= ?) and (? <= end_date)))",2,true,range_start_date, 
range_end_date,range_start_date,range_start_date) 

しかし、これは結果を取得するための良い方法ではありません。今私はelasticsearchインデックスから必要なデータを取得するためにこれを修正したい。

長い検索の後、私は "query_string"と "simple_query_string"が自分の要求に合っていることを発見しました。しかし、私は今まで必要な結果を得るには不成功です。

どのように私はelasticsearchの結果とクエリを追加して、必要なレコードを取得できますか? 助けてもらえますか?

ありがとうございます。

答えて

1

最後に、自分自身の質問に対する回答を見つけることができました。私は、検索されたコンテンツを日付に応じて "filter"キーワードでフィルタリングすることができました。

私は、クエリを変更:

search_query = { 
query: { 
    prefix: { 
    _all: keywords 
    } 
}, 
filter: { 
    query: { 
    query_string: { 
     query: "status_id:2 AND active:true AND 
     ((start_date:>=#{range_start_date} AND start_date:<=#{range_end_date}) (start_date:<=#{range_start_date} AND end_date:>=#{range_start_date}))" 
    } 
    } 
}, 
sort: [ { start_date: 'asc', start_time: 'asc' } ] } 

そして最後にして、結果をフェッチ:私はこのコードを変更する可能性がとにかくがある場合

@result = self.search(search_query) 

、提案してください。ありがとうございました。

関連する問題