![](/img/trans.png)
[英]Elasticsearch Java API - How to get the number of documents without retrieving the documents
[英]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.