Мне нужно привязать результат поиска из NEST (ElasticSearch) к Gridview
в ASP.NET (Webform).
Код Я получаю результат от ElasticSearch от использования NEST:
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» и «JLN», и он может автоматически генерировать 10 строк (я ограничиваю размер до 10 строк в синтаксисе поиска), но это пустые данные в столбце.
Я вижу, что в других статьях упоминается, что мне нужно сначала связать searchResponse.Documents.Tolist()
с DataTable
, и я попробовал метод с кодом ниже:
DataTable dt = new DataTable();
dt.Columns.Add("Field1", typeof(int));
dt.Columns.Add("Field2", typeof(string));
foreach (IHit<JObject> x in address)
{
dt.Rows.Add(
x.Fields.FieldValuesDictionary["Prop1"] as JArray,
x.Fields.FieldValuesDictionary["Prop2"] as JArray
);
}
Но я получаю сообщение об ошибке FieldValuesDictionary
:
FieldValues не содержит определения для «FieldValuesDictionary», и нет доступного метода расширения «FieldValuesDictionary», принимающего первый аргумент типа «FieldValues» (вы пропустили директиву using или ссылку на сборку?