2016-07-28 72 views
0

意向: Elasticsearch的Java MoreLikeThis查詢用Java做的正是下面通過/_search其餘端點原料more_like_this過濾查詢正在進行。不返回文件相比,「_search」 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其餘端點不同返航。我在索引中獲得了我整個文檔的大約四分之五的匹配。至於如果沒有過濾器被應用

瞄準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和beyound
  • @MoreLikeThisRequestBuilder將ES V1.6 +被棄用並在除去2.0相容性方面
相關問題