elasticsearch 如何禁用源字段并将存储与嵌套一起使用?,elasticsearch,nest,elasticsearch,Nest" /> elasticsearch 如何禁用源字段并将存储与嵌套一起使用?,elasticsearch,nest,elasticsearch,Nest" />

elasticsearch 如何禁用源字段并将存储与嵌套一起使用?

elasticsearch 如何禁用源字段并将存储与嵌套一起使用?,elasticsearch,nest,elasticsearch,Nest,我想禁用源代码,因为它最初是这样做的。我不知道如何在样品中达到类似的效果 PUT tweets { "mappings": { "tweet": { "_source": { "enabled": false } } } } 我在下面试过,但当我进去的时候;我可以看到所有的属性都已存储。我希望只存储和索引id和name属性 var node = new Uri("http://localhost:9200"); var sett

我想禁用源代码,因为它最初是这样做的。我不知道如何在样品中达到类似的效果

PUT tweets
{
  "mappings": {
    "tweet": {
      "_source": {
        "enabled": false
      }
    }
  }
}
我在下面试过,但当我进去的时候;我可以看到所有的属性都已存储。我希望只存储和索引id和name属性

var node = new Uri("http://localhost:9200");
 var settings = new ConnectionSettings(node, defaultIndex: "mydatabase");              
 var client = new ElasticClient(settings);  
 var createIndexResult = client.CreateIndex("mydatabase");  
  var mapResult = client.Map<Product>(c => c.MapFromAttributes().SourceField(s=>s.Enabled(false)).IgnoreConflicts().Type("product").Indices("mydatabase"));


 client.Index(sampleproduct);



  [ElasticType(Name ="product", IdProperty = "ProductId" )]
  [Table("Product")]
    public partial class Product
    {      

    [ElasticProperty(Name = "id",Index = FieldIndexOption.NotAnalyzed, Store = true)]
    public int ProductId { get; set; }

        [ElasticProperty(Index = FieldIndexOption.Analyzed, Store = true)]
    public string Name { get; set; }

    [ElasticProperty(Index = FieldIndexOption.No, Store = false)]
    public int? ProductTypeId { get; set; }

    [ElasticProperty(Index = FieldIndexOption.No, Store = false)]
    public int? ManufacturerId { get; set; }

    }
var节点=新Uri(“http://localhost:9200");
var设置=新连接设置(节点,默认索引:“mydatabase”);
var客户端=新的ElasticClient(设置);
var createIndexResult=client.CreateIndex(“mydatabase”);
var mapreult=client.Map(c=>c.MapFromAttributes().SourceField(s=>s.Enabled(false)).ignoreconflications().Type(“产品”).index(“mydatabase”);
客户索引(样本产品);
[ElasticType(Name=“product”,IdProperty=“ProductId”)]
[表(“产品”)]
公共部分类积
{      
[ElasticProperty(Name=“id”,Index=FieldIndexOption.NotAnalyzed,Store=true)]
public int ProductId{get;set;}
[ElasticProperty(Index=FieldIndexOption.analysis,Store=true)]
公共字符串名称{get;set;}
[ElasticProperty(Index=FieldIndexOption.No,Store=false)]
public int?ProductTypeId{get;set;}
[ElasticProperty(Index=FieldIndexOption.No,Store=false)]
public int?ManufacturerId{get;set;}
}
编辑:在创建索引后,不添加任何文档,索引元数据如图所示。我没有看到任何来源是假的

EDIT2:更改后,先创建索引,然后创建映射。Name字段显示store=true,如图像中所示,但未存储任何值。我进行了调试,并且我确实传递了索引sampleproduct的值


您需要先添加映射,然后为文档编制索引。只有这样,您才能看到“获取预期映射”对话框。通过在没有映射的情况下首先建立索引,可以使用默认选项(启用源代码)动态创建映射。

我刚刚尝试过,但没有真正的帮助。我仍然可以看到商店=没有属性。我用我的努力更新了我的问题。你是说像上面那样吗?不,你还是做错了。首先创建索引,然后创建映射,仅在索引文档之后。在更新的问题中,您在创建索引之前创建了映射,这是错误的。顺便说一句,您可以在创建索引的同时添加映射。但是@bittusarkar是对的,首先创建索引(可以选择同时指定映射)。我刚刚这么做了,它工作了,我可以看到sourceenabled为false,但name的store=true。我看不到存储了名称字段。虽然我说名称是索引的,但搜索对名称也不起作用。您知道可能有什么问题吗?在映射中,您设置了要存储的
name
字段,并且
\u source
被禁用。在搜索请求的结果中,除了一些元数据字段外,默认情况下还返回
\u source
字段的值。现在您禁用了
\u source
,如果需要获取
name
字段的值,您需要在搜索请求的
部分的
“字段”
中提到,如
“字段”:[“名称”]
。阅读有关使用
字段的更多信息。