2016-07-28 5 views
0

의도를 휴식.Elasticsearch 자바 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" 
    ] 
} 

그리고 이것은 위의 내 자바 구현 :

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 2.0와
  • @MoreLikeThisRequestBuilder는 ES의 V1.6 +에서 사용되지 및 2.0에서 제거 될 예정입니다 beyound 호환성 측면에서 앞으로 길을 것 같다