我正在使用java做一个网站(拍卖网站)。我有一页在拍卖中展示产品,我想展示10种类似的产品。
要使用elasticsearch执行搜索(使用elasticsearch java实现dadoonet)。
我的一个要求是仅显示具有日期>的10个类似文档。现在
我说弹性搜索文档,我找到了查询"更像这样"但首先我不能使用它来实现这个目的:
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
我找不到过滤日期的方法。
有人可以指出我正确的方法吗?
THKS
答案 0 :(得分:2)
我最好的选择是你有错误的身份证,我也看到你错过了这种类型。要使用更多这样的东西,您必须提供要使用的文档。这是由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();
答案 1 :(得分:0)
所以经过一段时间的努力,我找到了一个有同样问题的人。所以他的建议是将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是正确的值。有人知道这个领域是什么?
请求所有帮助!
再次感谢您的帮助,并为所有麻烦抱歉!