Java 中的 Elasticsearch 类似文档

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 错误,而且我还看到您缺少类型。要像这样使用更多,您必须提供要使用的文档。这是由索引、类型和 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 是否正确。有人知道这个字段是什么吗?

感谢大家的帮助!

再次感谢您的帮助,抱歉给您带来了麻烦!