在Nest(Elasticsearch)中使用SearchResponse的Stordordfield时出现错误



我需要将Nest(Elasticsearch(的搜索结果绑定到ASP.NET(WebForm(中的GridView。

代码我从使用Nest的Elasticsearch获得结果:

public class Address
{
    public int SN { get; set; }
    public string JLN { get; set; }
}
protected void BtnSearch_Clicked(object sender, EventArgs e)
{
    string SearchValue = txtSearchValue.Text;
    string es_host = System.Configuration.ConfigurationManager.AppSettings["cnStringIP"];
    string es_port = System.Configuration.ConfigurationManager.AppSettings["cnStringPort"];
    string es_index = System.Configuration.ConfigurationManager.AppSettings["cnStringIndex"];
    var settings = new ConnectionSettings(new Uri("http://" + es_host + ":" + es_port + ""))
        .DefaultIndex("masterlist*");
    var client = new ElasticClient(settings);
    var searchResponse = client.Search<Address>(s => s
            .Index("masterlist*")
            .From(0)
            .Size(10)
            .Query(q => q
                 .QueryString(qs => qs
                    .Query("JLN:""+ SearchValue +""")
                )
            )
        );
    var address = searchResponse.Documents.ToList();
    ESGridview.DataSource = address;
    ESGridview.DataBind();
}

使用此代码,GridView可以自动生成两个正确标头的字段,即" sn"one_answers" jln",并且可以自动生成10行(我将大小限制为search语法中的10行Max(,但是它是列中的空数据。

我确实找到了此链接的另一个帖子

https://www.elastic.co/guide/en/elasticsearch/client/net-api/6.x/returned-fields.html#returned fields

检查此链接后,我将代码更改为:

string SearchValue = txtSearchValue.Text;
string es_host = System.Configuration.ConfigurationManager.AppSettings["cnStringIP"];
string es_port = System.Configuration.ConfigurationManager.AppSettings["cnStringPort"];
string es_index = System.Configuration.ConfigurationManager.AppSettings["cnStringIndex"];
var settings = new ConnectionSettings(new Uri("http://" + es_host + ":" + es_port + ""))
    .DefaultIndex("masterlist*");
var client = new ElasticClient(settings);
var searchResponse = client.Search<Address>(s => s
    .StoredFields(sf => sf
        .Fields(
            f => f.SN,
            f => f.JLN
            )
         )
        .From(0)
        .Size(10)
        .Query(q => q
             .QueryString(qs => qs
                .Query("JLN:""+ SearchValue +""")
            )
        )
    );
foreach (var fieldValues in searchResponse.Fields)
{
    var document = new
    {
        SN = fieldValues.ValueOf<Address, int>(p => p.SN),
        JLN = fieldValues.Values<Address, string>(p => p.JLN)
    };
}
var address = searchResponse.Documents;
var count = "MaxScore" + searchResponse.MaxScore;
ESGridview.DataSource = address;
ESGridview.DataBind();

但是,我在从启动上运行代码时会遇到错误(var ...(区域:

system.nullReferenceException:"对象引用未设置为对象的实例。"

有人可以教我如何解决这个问题或我做的任何事情吗?非常感谢〜

elasticsearch 7.0.1 NEST 7.0.0 C# ASP.NET(WebForm(

我已经解决了我的问题。下面的代码是如何通过使用NEST将数据从Elasticsearch获取搜索物并将数据绑定到ASP.NET中的GridView。

public class Address
{
    [Text(Name = "SN")]
    public string SN { get; set; }
    [Text(Name = "JLN")]
    public string JLN { get; set; }
}
protected void BtnSearch_Clicked(object sender, EventArgs e)
{
    string SearchValue = txtSearchValue.Text;
    string es_host = System.Configuration.ConfigurationManager.AppSettings["cnStringIP"];
    string es_port = System.Configuration.ConfigurationManager.AppSettings["cnStringPort"];
    string es_index = System.Configuration.ConfigurationManager.AppSettings["cnStringIndex"];
    var settings = new ConnectionSettings(new Uri("http://" + es_host + ":" + es_port + ""))
        .DefaultIndex("masterlist*");
    var client = new ElasticClient(settings);
    var searchResponse = client.Search<Address>(s => s
            .From(0)
            .Size(100)
            .Query(q => q
                 .QueryString(qs => qs
                    .Query("JLN:"" + SearchValue + """)
                )
            )
        );
    var address = searchResponse.Documents.ToList();
    ESGridview.DataSource = address;
    ESGridview.DataBind();
}

最新更新