hel*_*rld 5 c# elasticsearch nest
我正在编写下面的代码,我想要做的是按对象本身查询.
例如:我有一个搜索表单,填充下面的对象字段.那么我想要做的是根据填写表单的用户搜索弹性搜索.
ie:下面,我想通过searchItem对象查询索引.我怎么能轻易做到?
class Program
{
static void Main(string[] args)
{
var p = new Program();
var item1 = new Announcement() {Id=1, Title = "john", ContentText = "lorem", Bar = false, Num = 99, Foo = "hellow"};
//p.Index(item1, "add");
var searchItem = new Announcement() {Title="john",Num=99};
ElasticClient.Search<Announcement>();
Console.Read();
}
public void Index(Announcement announcement, String operation)
{
var uriString = "http://localhost:9200";
var searchBoxUri = new Uri(uriString);
var settings = new ConnectionSettings(searchBoxUri);
settings.SetDefaultIndex("test");
var client = new ElasticClient(settings);
if (operation.Equals("delete"))
{
client.DeleteById("test", "announcement", announcement.Id);
}
else
{
client.Index(announcement, "test", "announcement", announcement.Id);
}
}
private static ElasticClient ElasticClient
{
get
{
try
{
var uriString = "http://localhost:9200";
var searchBoxUri = new Uri(uriString);
var settings = new ConnectionSettings(searchBoxUri);
settings.SetDefaultIndex("test");
return new ElasticClient(settings);
}
catch (Exception)
{
throw;
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
你不能:)
NEST无法根据部分填充的POCO推断如何最佳查询.OR或AND是否应该执行嵌套的术语查询或包含在has_child中的术语查询?你抓住了我的漂移.
Nest确实有一个称为无条件查询的灵活功能,允许您写出整个查询,如下所示:
ElasticClient.Search<Announcement>(s=>s
.Query(q=>
q.Term(p=>p.Title, searchItem.Title)
&& q.Term(p=>p.Num, searchItem.Num)
//Many more queries use () to group all you want
)
)
Run Code Online (Sandbox Code Playgroud)
当NEST发现传递给Term的参数为null或为空时,它根本不会呈现查询的那一部分.
点击此处了解此功能的工作原理http://nest.azurewebsites.net/concepts/writing-queries.html