2016-07-28 19 views
0

意向を休みます。ElasticsearchのJava APIのMoreLikeThisは、エンドポイント

GET /index/type/_search 
{ 
    "query": { 
    "filtered": { 
     "query": { 
     "more_like_this": { 
      "fields": [ 
      "title", 
      "body", 
      "description", 
      "organisations", 
      "locations" 
      ], 
      "min_term_freq": 2, 
      "max_query_terms": 25, 
      "ids": [ 
      "http://xxx/doc/doc" 
      ] 
     } 
     }, 
     "filter": { 
     "range": { 
      "datePublished": { 
      "gte": "2016-01-01T12:30:00+01:00" 
      } 
     } 
     } 
    } 
    }, 
    "fields": [ 
    "title", 
    "description", 
    "datePublished" 
    ] 
} 

そして、これは上記のための私のJava実装である:

FilteredQueryBuilder queryBuilder = new FilteredQueryBuilder(QueryBuilders.matchAllQuery(),FilterBuilders.rangeFilter("datePublished").gte(("2016-01-01T12:30:00+01:00"))); 
SearchSourceBuilder query = SearchSourceBuilder.searchSource().query(queryBuilder); 
return client.prepareMoreLikeThis("index", "type", "http://xxx/doc/doc") 
    .setField("title", "description", "body", "organisations","locations") 
    .setMinTermFreq(2) 
    .maxQueryTerms(25) 
    .setSearchSource(query); 

しかし、結果ははるかにエンドポイントが戻ったmore_like_this残りの部分から異なっています。私はインデックス内の私の全文書の約4分の5のマッチを得ています。フィルタのいずれもES v1.4.2v1.6.2

どれアドバイスplease.Thanks

+0

異なる日付公開フィルタ – alpert

+0

あなたは日付の違いを意味しますか?もしそうなら、それはこの記事のためにこれを書く私の部分の愚かなタイプミスでした。そのフィルタ機構の違いが精巧であれば、ありがとう@alpert – DaddyMoe

答えて

0

をターゲット

を適用していないされているかのように私はQueryBuilders.moreLikeThisQuery()と欲望の結果を得ました。この投稿の感想はhereです。

FilterBuilder filterBuilder = FilterBuilders.rangeFilter("datePublished") 
     .gte("2016-01-01T12:30:00+01:00") 
     .includeLower(false).includeUpper(false); 

    MoreLikeThisQueryBuilder mltQueryBuilder = QueryBuilders.moreLikeThisQuery("title", "description", "body", "organisations","locations") 
     .minTermFreq(2) 
     .maxQueryTerms(25) 
     .ids("http://xxx/doc/doc"); 

    SearchRequestBuilder searchRequestBuilder = client.prepareSearch("index"); 

    searchRequestBuilder.setTypes("type"); 
    searchRequestBuilder.addFields("title","description","datePublished"); 
    searchRequestBuilder.setQuery(mltQueryBuilder).setPostFilter(filterBuilder); 

    searchRequestBuilder.execute().actionGet() 

注:

  • QueryBuildersはES v2.0の持つと
  • @MoreLikeThisRequestBuilderはESバージョン1.6 +で非推奨となり、2.0で削除されますbeyound互換性の面で進むべき道であると思わ
関連する問題