elasticsearch,nest,elasticsearch.net,C#,elasticsearch,Nest,Elasticsearch.net" /> elasticsearch,nest,elasticsearch.net,C#,elasticsearch,Nest,Elasticsearch.net" />

C# ElasticSearch.net嵌套匹配与查询不匹配

C# ElasticSearch.net嵌套匹配与查询不匹配,c#,elasticsearch,nest,elasticsearch.net,C#,elasticsearch,Nest,Elasticsearch.net,我正在使用elasticsearch.net库查询ES。面临与查找结果相关的问题。添加了屏幕截图,该截图显示了使用Kibana的im查询搜索结果 使用以下代码进行尝试时,不会检索到任何结果 var searchResponse = client.Search<Product>(s => s .Index("products1") .From(0) .Size(10) .Query(q => q .Match(m => m .Field(f => f.Name)

我正在使用elasticsearch.net库查询ES。面临与查找结果相关的问题。添加了屏幕截图,该截图显示了使用Kibana的im查询搜索结果

使用以下代码进行尝试时,不会检索到任何结果

var searchResponse = client.Search<Product>(s => s
.Index("products1")
.From(0)
.Size(10)
.Query(q => q
.Match(m => m
.Field(f => f.Name)
.Query("Duracarb 32 oz (907.2 g)")
)
)
);
var searchResponse=client.Search(s=>s
.索引(“产品1”)
.从(0)
.尺寸(10)
.Query(q=>q
.Match(m=>m
.Field(f=>f.Name)
.查询(“Duracarb 32盎司(907.2克)”)
)
)
);
但当我尝试通过添加match来使用下面的代码时,我能够成功地检索到10个产品

var searchResponse = client.Search<Product>(s => s
.Index("products1")
.From(0)
.Size(10)
.Query(q => q
.MatchAll()
)
);
var searchResponse=client.Search(s=>s
.索引(“产品1”)
.从(0)
.尺寸(10)
.Query(q=>q
.MatchAll()
)
);
下面是我使用的完整代码

var uris = new[]
{
    new Uri(_searchSettings.EnableElasticURL),
    //new Uri("http://localhost:9201"),
    //new Uri("http://localhost:9202"),
};

var connectionPool = new SniffingConnectionPool(uris);
var settings = new ConnectionSettings(connectionPool)
    .DefaultIndex("products1");

var client = new ElasticClient(settings);
var searchRequest = new SearchRequest<Product>(Nest.Indices.All, Types.All)
{
    From = 0,
    Size = 10,
    Query = new MatchQuery
    {
        Field = Infer.Field<Product>(f => f.Name),
        Query = "Duracarb 32 oz(907.2 g)"
    }
};
var searchResponse = client.Search<Product>(s => s
.Index("products1")
            .From(0)
            .Size(10)
            .Query(q => q
     .Match(m => m.Field(f => f.Name).Query("Duracarb 32 oz (907.2 g)")))
    );
var stream = new System.IO.MemoryStream();
client.SourceSerializer.Serialize(searchResponse, stream);
var jsonQuery = System.Text.Encoding.UTF8.GetString(stream.ToArray());
var query = searchResponse.Documents;
var requestttt=searchResponse.DebugInformation;
//var query = GetProductQuery(searchQuery, null);
_logger.Debug("Search Response: "+query);
var uris=new[]
{
新Uri(_searchSettings.EnableElasticURL),
//新Uri(“http://localhost:9201"),
//新Uri(“http://localhost:9202"),
};
var connectionPool=新的嗅探连接池(URI);
var设置=新连接设置(连接池)
.DefaultIndex(“产品1”);
var客户端=新的ElasticClient(设置);
var searchRequest=新的searchRequest(Nest.index.All,Types.All)
{
From=0,
尺寸=10,
Query=新匹配查询
{
Field=推断字段(f=>f.Name),
Query=“Duracarb 32盎司(907.2克)”
}
};
var searchResponse=client.Search(s=>s
.索引(“产品1”)
.从(0)
.尺寸(10)
.Query(q=>q
.Match(m=>m.Field(f=>f.Name).Query(“Duracarb 32盎司(907.2克)”)
);
var stream=new System.IO.MemoryStream();
SourceSerializer.Serialize(searchResponse,stream);
var jsonQuery=System.Text.Encoding.UTF8.GetString(stream.ToArray());
var query=searchResponse.Documents;
var requestttt=searchResponse.DebugInformation;
//var query=GetProductQuery(searchQuery,null);
_调试(“搜索响应:”+查询);

更改从POCO属性名称推断字段名称的方式:

var settings = new ConnectionSettings(connectionPool)
    .DefaultFieldNameInferrer(n => n)
    .DefaultIndex("products1");
现在,
infere.Field(f=>f.Name)
将序列化为
“Name”
,以匹配索引映射中的字段名

,因此默认情况下将序列化为
“name”