2016-06-23 2 views
2

私はelasticsearch(v2.3.3)の上にWebアプリケーションを構築しました。クエリをフィルタリングするために、私はelasticsearchのpostフィルタを使用しています。しかし、ポストフィルタを使用すると、集約フィルタまたは差分フィルタリングを使用していないため、フィルタリングのパフォーマンス上のメリットが失われることがわかりました。 (参考:https://www.elastic.co/guide/en/elasticsearch/guide/current/_post_filter.htmlElasticsearch 2.3.3でのポストフィルタクエリJavaを使用

これは私のelasticsearchクライアントがどのように見えるかです:

Client client = TransportClient.builder().build().addTransportAddress(
     new InetSocketTransportAddress(InetAddress.getByName("127.0.0.1"), 
      9300)); 
    SearchResponse response = client.prepareSearch("index_name") 
     .setTypes("index_type") 
     .setQuery(QueryBuilders.simpleQueryStringQuery(query) 
      .field("newContent").field("T")) 
     .setPostFilter(QueryBuilders.termQuery(Collection, true)) 
     .setFetchSource(new String[] { "U", "UE", "UD", "T" }, null) 
     .setVersion(true).addHighlightedField("newContent").setFrom(0) 
     .setSize(10).execute().actionGet(); 

私はまた、フィルタクエリがelasticsearch 2.xのバージョンで減価償却されていることを読みました。クエリが実行される前にフィルタを適用するのに役立つ他の方法はありますか?私は何かが明らかでないかもしれない。私はあなたの助けに感謝します。

答えて

5

投稿フィルタ内にあるフィルタをbool/filterクエリ内に持ってくるだけで済みます。代わりにヒットを試してください:

BoolQueryBuilder boolQuery = QueryBuilders.boolQuery() 
    .must(QueryBuilders.simpleQueryStringQuery(query) 
       .field("newContent").field("T")) 
    .filter(QueryBuilders.termQuery(Collection, true)); 

SearchResponse response = client.prepareSearch("index_name") 
    .setTypes("index_type") 
    .setQuery(boolQuery) 
    .setFetchSource(new String[] { "U", "UE", "UD", "T" }, null) 
    .setVersion(true).addHighlightedField("newContent").setFrom(0) 
    .setSize(10).execute().actionGet(); 
+0

ありがとうございます。私はこれを試し、あなたに知らせる – Rose

+0

こんにちは、私はあなたのソリューションを使用しようとしています。 BoolQueryBuilderでは、 "import org.elasticsearch.index.query.BoolQueryBuilder"パッケージをインポートしました。 OueryBuilderでは、私は "org.elasticsearch.index.query.BoolQueryBuilder"をインポートしてインポートしました。私は他の輸入品も試しました。しかし、私は "メソッドboolQuery()はMultiMatchQuery.QueryBuilder型のために定義されていません"というエラーを受け取りました。私が紛失している他の輸入品はありますか? – Rose

+2

申し訳ありませんが、私は誤って 'QueryBuilder'を' QueryBuilders'にする必要があります。私の悪い、私はそれを修正した – Val

関連する問題