簡體   English   中英

Elasticsearch Java中的類似文檔

[英]Elasticsearch similar documents in Java

我正在使用Java建立網站(拍賣網站)。 我有一頁要在拍賣中展示該產品,我想展示10個類似產品。

為了執行搜索,我使用了elasticsearch(通過使用elasticsearch java實現dadoonet)。

我的一項要求是僅顯示日期>現在的10個類似文檔。

我說了Elasticsearch文檔,發現了查詢“ More like this”,但首先我無法使用以下方法來工作:

new MoreLikeThisRequest("auction").searchSize(size).id(productId + "").fields(new String[] { "name", "description", "brand" }).type("string");

因為總是顯示錯誤:

org.elasticsearch.index.engine.DocumentMissingException: [_na][_na] [string][2]: document missing

而且我找不到過濾日期的方法。

有人可以指出正確的方法嗎?

謝謝

我最好的選擇是,您輸入的ID錯誤,並且我還看到您缺少該類型。 要使用更多此類文件,您必須提供要使用的文檔。 這由index,type和id的組合定義。 如果您未指定文檔權限,elasticsearch將找不到該文檔,這很可能是您收到文檔丟失消息的原因。

在Java中,我將執行以下操作:

FilteredQueryBuilder queryBuilder = 
        new FilteredQueryBuilder(
                QueryBuilders.matchAllQuery(),
                FilterBuilders.rangeFilter("datefield").lte("now")
        );
SearchSourceBuilder query = SearchSourceBuilder.searchSource().query(queryBuilder);

client.prepareMoreLikeThis("index","type","id")
    .setField("field1","field2")
    .setSearchSource(query)
    .execute().actionGet();

因此,經過一番努力后,我發現有人遇到相同的問題。 因此,他的建議是將min_term_freq設置為1。

因此,代碼現在看起來像這樣:

FilteredQueryBuilder queryBuilder = new FilteredQueryBuilder(QueryBuilders.matchAllQuery(), FilterBuilders.rangeFilter("finish_date").lt("now"));
        SearchSourceBuilder query = SearchSourceBuilder.searchSource().query(queryBuilder);
        SearchResponse response = esClient.prepareMoreLikeThis("auction", "product", productId + "").setField("name.name", "description", "brand").setPercentTermsToMatch(0.3f)
                .setMinTermFreq(1).setSearchSource(query).execute().actionGet();

但是我不知道這個MinTermFreq是做什么的,以及值1是否是正確的值。 有人知道這是什么領域嗎?

謝謝所有的幫助!

再次感謝您的所有幫助,對於所有麻煩,我們深表歉意!

暫無
暫無

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

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