当前位置: 首页 > 知识库问答 >
问题:

如何从NEST连接到弹性搜索

乌翰学
2023-03-14

我目前正在运行elastic search和kibana 7.0.0版,在我的项目中有一个docker compose文件

version: '3.4'

services:
  search.api:
    image: ${DOCKER_REGISTRY-}searchapi
    build:
      context: .
      dockerfile: Search.API/Dockerfile

  elasticsearch:
    image: docker.elastic.co/elasticsearch/elasticsearch:7.0.0
    container_name: elasticsearch
    environment:
      - discovery.type=single-node
      - cluster.name=docker-cluster
      - bootstrap.memory_lock=true
      - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
    ulimits:
      memlock:
        soft: -1
        hard: -1
    ports:
      - "9200:9200"
      - "9300:9300"
    volumes:
      - es_data:/elasticsearch/data
    networks:
      - esnetwork
  kibana:
    image: docker.elastic.co/kibana/kibana:7.0.0
    container_name: kibana
    environment:
      - "ELASTICSEARCH_URL=http://elasticsearch:9200"
    ports:
      - "5601:5601"
    networks:
      - esnetwork
    depends_on:
      - elasticsearch
networks:
    esnetwork:
        driver: bridge

volumes:
  es_data:

我能够连接到端口5601上的kibana(索引和搜索数据),以及端口9200上的弹性搜索。

我试图使用NEST连接到弹性这里是我的基本配置

public static IServiceCollection AddElasticsearch(this IServiceCollection services, IConfiguration configuration)
{
    var settings = new ConnectionSettings(new Uri("http://localhost:9200"));
    var client = new ElasticClient(settings);

    var pingResponse = client.Ping(new PingRequest());
    Log.Debug("Ping client {0}",pingResponse);

    services.AddSingleton<IElasticClient>(client);

    return services;
}

当我通过NEST执行任何命令时,如ping、健康检查或搜索等,我检索到以下异常。这让我相信docker容器(linux容器)中存在一些与网络相关的问题,但我目前被难倒了

Invalid NEST response built from a unsuccessful low level call on POST: /clients/_search?typed_keys=true
# Audit trail of this API call:
 - [1] BadRequest: Node: http://localhost:9200/ Took: 00:00:00.8555510
# OriginalException: System.Net.Http.HttpRequestException: Cannot assign requested address ---> System.Net.Sockets.SocketException: Cannot assign requested address
   at System.Net.Http.ConnectHelper.ConnectAsync(String host, Int32 port, CancellationToken cancellationToken)
   --- End of inner exception stack trace ---
   at System.Net.Http.ConnectHelper.ConnectAsync(String host, Int32 port, CancellationToken cancellationToken)
   at System.Threading.Tasks.ValueTask`1.get_Result()
   at System.Net.Http.HttpConnectionPool.CreateConnectionAsync(HttpRequestMessage request, CancellationToken cancellationToken)
   at System.Threading.Tasks.ValueTask`1.get_Result()
   at System.Net.Http.HttpConnectionPool.WaitForCreatedConnectionAsync(ValueTask`1 creationTask)
   at System.Threading.Tasks.ValueTask`1.get_Result()
   at System.Net.Http.HttpConnectionPool.SendWithRetryAsync(HttpRequestMessage request, Boolean doRequestAuth, CancellationToken cancellationToken)
   at System.Net.Http.RedirectHandler.SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
   at System.Net.Http.HttpClient.FinishSendAsyncBuffered(Task`1 sendTask, HttpRequestMessage request, CancellationTokenSource cts, Boolean disposeCts)
   at Elasticsearch.Net.HttpConnection.RequestAsync[TResponse](RequestData requestData, CancellationToken cancellationToken)
# Request:
<Request stream not captured or already read to completion by serializer. Set DisableDirectStreaming() on ConnectionSettings to force it to be set on the response.>
# Response:
<Response stream not captured or already read to completion by serializer. Set DisableDirectStreaming() on ConnectionSettings to force it to be set on the response.>

共有1个答案

洪飞白
2023-03-14

您需要让docker compose文件中的search.api服务和弹性服务位于同一网络上。还要添加search.api依赖于弹性搜索服务。

services:
  search.api:
    image: ${DOCKER_REGISTRY-}searchapi
    build:
      context: .
      dockerfile: Search.API/Dockerfile'
    depends_on:
      - elasticsearch
    networks:
      - esnetwork
 类似资料:
  • 我在localhost:9200上有一个本地弹性搜索,当我向浏览器输入地址时,我得到了以下内容: 当我尝试运行我的应用程序时,我得到以下错误: 如何用我的Jhipster(V5.0.0-beta.3)后端连接到这个弹性服务器?

  • 在我的maven-Spring项目中,我试图以以下身份连接到ElasticSearch:TransportClient esclient=TransportClient.builder().build().AddTransportAddress(new InetSocketTransportAddress(InetAddress.GetByName(“localHost”),9300)); 我不断

  • 我正在尝试创建一个节点。带有RESTAPI的js应用程序,用于查询弹性搜索应用程序云上的数据。我有以下elasticsearch连接代码 上面的连接连接正确,如果我添加任何数据,它也会被添加。但是我希望数据不会被添加到本地主机。我希望我的实际集群拥有数据。我尝试了以下代码 上面的代码仍然没有添加数据或从我的云集群中检索数据... Evrry在互联网上我只找到localhost示例...有人能告诉我

  • 我试图使用docker容器创建一个弹性搜索安装。我只使用Elastic.io提供者的映像。 我不知道为什么,但logstash告诉我,他无法连接到带有此错误消息的ElasticSearch实例: 如果logstash真的得到了我的设置,有人能告诉我为什么他使用了一个坏的主机事件吗?

  • 我有两个弹性搜索服务器,我需要添加到spring boot项目的连接。对于一个连接,下面是我的代码, 那么如何添加其他服务器连接呢?如果我复制这个类并添加其他服务器连接详细信息,它会起作用吗?而且我还需要分隔索引。例如,我需要索引必须仅在中,并且索引必须仅在中。这可能吗?如果有人能帮助我,真的很感激。

  • 我不知道如何通过MatchPhrasePrefix搜索索引中的文档。我想匹配整个搜索词短语,但允许在最后一个词上加前缀。 这个LINQ建筑给了我1.0分的一切。我将如何构建这个?另一方面,是否可以查看NEST正在构建的原始查询?那将非常有帮助!