gpt4 book ai didi

c# - 使用 Nest 进行 Elasticsearch

转载 作者:太空狗 更新时间:2023-10-29 23:15:29 25 4
gpt4 key购买 nike

我正在处理下面的代码,我想做的是按对象本身进行查询。

例如:我有一个搜索表单,它填充如下所示的对象字段。然后我想做的是根据用户填写表单的内容来搜索 Elasticsearch 。

即:下面,我想通过 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;
}
}
}
}

最佳答案

你不能:)

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
)
)

当 NEST 发现传递给 Term 的参数为 null 或空时,它不会呈现该部分查询。

在此处详细了解此功能的工作原理 http://nest.azurewebsites.net/concepts/writing-queries.html

关于c# - 使用 Nest 进行 Elasticsearch ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19125843/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com