【问题标题】:Elasticsearch Nest : Fetching random documentsElasticsearch Nest:获取随机文档
【发布时间】:2014-11-18 09:15:27
【问题描述】:

我正在尝试使用 Elastic Search NEST 客户端获取随机记录。 有没有办法做到这一点?

【问题讨论】:

    标签: c# elasticsearch nest


    【解决方案1】:

    为了补充 @pickypg 的回答,这里有一个示例,说明如何在 NEST 中使用 random_score 函数编写 function_score 查询:

    client.Search<MyType>(s => s
        .Query(q => q
            .FunctionScore(fs => fs
                .Query(fq => fq.MatchAll())
                .RandomScore()
            )
        )
    );
    

    【讨论】:

    • API 好像变了。现在可以使用:client.Search&lt;MyType&gt;(s =&gt; s .Query(q =&gt; q .FunctionScore(fs =&gt; fs .Query(fq =&gt; fq.MatchAll()) .Functions(f=&gt;f .RandomScore( Guid.NewGuid().ToString() ) ) ) ) );
    【解决方案2】:

    ES 7.x

    NEST 方式:

    var result = _elastic.Search<dynamic>(s => s
            .Query(q => q
            .FunctionScore(fs => fs.Functions(f => f.RandomScore())
            .Query(fq => fq.MatchAll()))));
    

    原始查询方式:

     GET index-name/_search
        "size": 1,
        "query": {
            "function_score": {
                    "query" : { "match_all": {} },
                   "random_score": {}
            }
        }
    }
    

    【讨论】:

      【解决方案3】:

      这更像是一个 Elasticsearch 问题,而不是与 NEST 相关的问题。考虑到这一点,您可以在 Elasticsearch 中使用 random_score function 来执行此操作。 random_score 是 Elasticsearch 中可用的众多 function_score 之一(包括脚本评分),它可用于控制每个匹配文档的 _score

      相对于 Elasticsearch 的 REST API

      curl -XGET localhost:9200/your-index/your-type/_search -d '{
        "query" : {
          "function_score": {
            "query": { "match_all": {} },
            "random_score" : { }
          }
        },
        "size" : 1
      }'
      

      您可以控制随机数生成器使用的种子您可以创建自己的随机函数得分。当前的random_score 实现从索引(唯一标识符)加载_uid 字段,文档说明可能会占用大量内存。

      【讨论】:

        猜你喜欢
        • 2014-11-11
        • 1970-01-01
        • 1970-01-01
        • 2015-09-13
        • 2022-01-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多