【问题标题】:Why is elasticsearch's Nest lowlevel Search method ignoring type and index name defined in SearchDescriptor<>() object为什么 elasticsearch 的 Nest 低级搜索方法忽略 SearchDescriptor<>() 对象中定义的类型和索引名称
【发布时间】:2021-02-01 06:45:00
【问题描述】:

NEST/Elasticsearch.Net 版本:5.6.5

Elasticsearch 版本:5.4.3

我们正在尝试使用 LowLevelClient 从我们的索引中获取结果。我们正在使用下面的SearchAsync API

 var searchDescriptor = new SearchDescriptor<MyType>()
                                                       .Type("mytype")
                                                       .Index("myindex")
                                                       .Query(....)
                                                       .Aggregation(ag => ag.Terms(... Aggregation(ag1 => ag1.Min(...TopHits(...)))));
            var memoryStream = new MemoryStream();
            _client.Serializer.Serialize(searchDescriptor, memoryStream);
            var response = await _client.LowLevel.SearchAsync<byte[]>(memoryStream.ToArray()).ConfigureAwait(false);
           //_client - instance of Nest.ElasticClient
           //Next Step - Deserialize the response

这也给了我来自其他索引的结果(来自各种索引的结果的组合)并且我的反序列化正在中断。客户端忽略类型和索引名称并在弹性搜索上调用 POST /_search API 而不是 POST /myindex/mytype/_search

注意:

  1. 我们需要调用较低级别的客户端,因为出于性能考虑,我们正在使用自定义反序列化器

这里有什么问题?

【问题讨论】:

    标签: elasticsearch elasticsearch-5 elasticsearch-net


    【解决方案1】:

    找到解决方法

    SearchAsync&lt;&gt;() 方法重载了方法_client.LowLevel.SearchAsync&lt;T&gt;(string indexName, string typeName, T t)

    传递索引名称和类型名称将缩小范围以搜索到该特定索引。

    但问题仍然存在,为什么它不从SearchDescriptor 对象中获取索引和类型名称。

    【讨论】:

      猜你喜欢
      • 2021-06-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-09-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多