【问题标题】:LINQ expressions for Elasticsearch NEST queryElasticsearch NEST 查询的 LINQ 表达式
【发布时间】:2016-04-28 06:36:35
【问题描述】:

我如下设置索引。但是现在我有一个要求,因此我需要调整索引样式。 (我必须在下面的代码中添加分析器字段)。

参考[我之前的问题及其答案]:Elastic Search using NEST - Results different in debug and browser mode

如何改写

var connectionSettings = new ConnectionSettings(pool)
        .DefaultIndex(defaultIndex)
        .MapDefaultTypeNames(m => m.Add(typeof(Class1), "omg"))
        .PrettyJson()
        .DisableDirectStreaming());

使用如下映射设置。

{
  "mappings": {
    "Class1": {
      "properties": {
        "Answer": {
          "type": "string",
          "analyzer": "english"
        }
      }
    }
  }
}

这是我的回答:

 settings = new ConnectionSettings(pool)
              .DefaultIndex(defaultIndex)
              .MapDefaultTypeNames(m => m.Add(typeof(Class1), "omg"))
              .PrettyJson()
              .DisableDirectStreaming();

            var descriptor = new CreateIndexDescriptor(defaultIndex)
                            .Mappings(ms => ms
                            .Map<Class1>(m => m
                            .Properties(ps => ps
                            .String(s=>s
                            .Name(n=>n.Ans)
                            .Analyzer("english")))));

我想我在索引创建和映射之间缺少链接。虽然它在编码时没有显示错误,但输出并不像预期的那样。

TIA

【问题讨论】:

  • 我刚刚在 Sense 插件上试了一下,看看它是否工作正常。然后尝试通过在.MapDefaultTypeNames(m =&gt; m.Add(typeof(Class1), "omg")) 之后添加.MapPropertiesFor&lt;&gt; 来稍微调整您的代码我的想法是,在将名称默认为class1 之后,我们需要提供它们的属性,所以尝试.MapProperties
  • 谢谢拉斯。将查看它并返回答案。
  • @RussCam 我尝试为其创建索引描述符,但输出与预期不符。我错过了任何链接吗?我必须将此描述符传递给设置吗?

标签: c# linq elasticsearch nest


【解决方案1】:

CreateIndexDecriptor&lt;T&gt; 是用于创建索引的描述符,但您需要将其传递给 IElasticClient.CreateIndex() 方法才能在 Elasticsearch 中创建索引。

void Main()
{
    var defaultIndex = "default-index";
    var pool = new SingleNodeConnectionPool(new Uri("http://localhost:9200"));

    var settings = new ConnectionSettings(pool, new InMemoryConnection())
             .DefaultIndex(defaultIndex)
             .MapDefaultTypeNames(m => m.Add(typeof(Class1), "omg"))
             .PrettyJson()
             .DisableDirectStreaming();

    var client = new ElasticClient(settings);

    client.CreateIndex("new-index", c => c
        .Mappings(ms => ms
            .Map<Class1>(m => m
                .Properties(ps => ps
                    .String(s => s
                        .Name(n => n.Ans)
                        .Analyzer("english")
                    )
                )
            )
        )
    );
}

public class Class1
{
    public string Ans { get; set;}
}

对 Elasticsearch 的请求看起来像

{
  "mappings": {
    "omg": {
      "properties": {
        "ans": {
          "type": "string",
          "analyzer": "english"
        }
      }
    }
  }
}

【讨论】:

    猜你喜欢
    • 2015-06-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多