簡體   English   中英

Elasticsearch Java API MoreLike與“ _search”其余端點相比,此文檔不返回文檔

[英]Elasticsearch Java API MoreLikeThis not returning documents compared to “_search” rest endpoint

目的:Elasticsearch Java MoreLikeJava中的此查詢完全通過/_search rest端點執行以下原始的more_like_this過濾查詢的/_search

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

請給我任何建議。

我通過QueryBuilders.moreLikeThisQuery()獲得了期望的結果。 從這個帖子的靈感在這里

 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()

筆記:

  • 就與ES v2.0和beyound的兼容性而言, QueryBuilders似乎是前進的方向
  • 在ES v1.6 +中將棄用@MoreLikeThisRequestBuilder ,並在2.0中將其刪除

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM