elasticsearch Elasticsearch的嵌套查询不工作,elasticsearch,nest,elasticsearch,Nest" /> elasticsearch Elasticsearch的嵌套查询不工作,elasticsearch,nest,elasticsearch,Nest" />

elasticsearch Elasticsearch的嵌套查询不工作

elasticsearch Elasticsearch的嵌套查询不工作,elasticsearch,nest,elasticsearch,Nest,我们正在使用NEST API使用C#来处理Elasticsearch。 虽然我们可以插入数据,但引用对象中特定字段的查询不起作用 例如,给定以下类: internal class Magazine { public Magazine(string id, string title, string author) { Id = id; Title = title; Author = author; } public string Id

我们正在使用NEST API使用C#来处理Elasticsearch。 虽然我们可以插入数据,但引用对象中特定字段的查询不起作用

例如,给定以下类:

internal class Magazine
{
   public Magazine(string id, string title, string author)
   {
      Id = id;
      Title = title;
      Author = author;
   }

   public string Id { get; set; }
   public string Title { get; set; }
   public string Author { get; set; }
}
创建类的对象并将其插入ElasticSearch,如下所示:

Magazine mag1= new Magazine("1", "Soccer Review", "John Smith");
Magazine mag2= new Magazine("2", "Cricket Review", "John Smith");

Uri node = new Uri("http://localhost:9200");
ConnectionSettings settings = new ConnectionSettings(node, defaultIndex: "mag-application");
ElasticClient client = new ElasticClient(settings);
client.Index(mag1);
client.Index(mag2);
以下查询工作,并返回两行:

var searchResults = client.Search<Magazine>(s => s.From(0).Size(20));
var searchResults=client.Search(s=>s.From(0).Size(20));
但这一个什么也不返回:

var searchResults = client.Search<Magazine>(s => s.From(0).Size(20).Query(q => q.Term(p => p.Author, "John Smith")));
var searchResults=client.Search(s=>s.From(0).Size(20).Query(q=>q.Term(p=>p.Author,“John Smith”));

怎么了?

由于您使用的是标准分析器(默认选项),“John Smith”字符串被分为两个标记“John”和“Smith”

术语查询:

匹配具有包含术语(未分析)的字段的文档

也就是说,您正在搜索的短语不会从上述分析过程中传递

尝试搜索

client.Search<Magazine>(s => s.From(0).Size(20).Query(q => q.Term(p => p.Author, "john")));
client.Search(s=>s.From(0).Size(20).Query(q=>q.Term(p=>p.Author,“john”));
或者使用如下匹配查询:

client.Search<Magazine>(s => s.From(0).Size(20)..Query(q => q.Match(m => m.OnField(p => p.Author).Query("John Smith"))
client.Search(s=>s.From(0).Size(20)…查询(q=>q.Match(m=>m.OnField(p=>p.Author.Query)(“约翰·史密斯”))

查看以了解更多信息。

非常感谢。第一个建议不起作用,但第二个建议起作用。我想您尝试过小写字母“john”。“john”找不到,因为标准分析器将所有令牌转换为小写,这就是它们在Elasticsearch中的工作方式。第二个用于更改OnField-->字段