elasticsearch 嵌套:如何查询多个索引并处理不同的子类(文档类型)?,elasticsearch,nest,elasticsearch,Nest" /> elasticsearch 嵌套:如何查询多个索引并处理不同的子类(文档类型)?,elasticsearch,nest,elasticsearch,Nest" />

elasticsearch 嵌套:如何查询多个索引并处理不同的子类(文档类型)?

elasticsearch 嵌套:如何查询多个索引并处理不同的子类(文档类型)?,elasticsearch,nest,elasticsearch,Nest,在我的C#项目中,我正在将ElasticSearch与NEST结合起来。我的用例包括几个不同文档类型的索引,到目前为止我分别查询了这些索引。现在我想实现一个全局搜索功能,它可以查询所有现有的索引、文档类型,并正确地对结果进行评分 所以我的问题是:我如何通过使用NEST来实现这一点 目前我正在使用函数SetDefaultIndex,但如何定义多个索引 为了更好地理解,我想用NEST实现以下问题: { "query": { "indices": { "indices": [

在我的C#项目中,我正在将ElasticSearch与NEST结合起来。我的用例包括几个不同文档类型的索引,到目前为止我分别查询了这些索引。现在我想实现一个全局搜索功能,它可以查询所有现有的索引、文档类型,并正确地对结果进行评分

所以我的问题是:我如何通过使用NEST来实现这一点

目前我正在使用函数
SetDefaultIndex
,但如何定义多个索引

为了更好地理解,我想用NEST实现以下问题:

{
  "query": {
    "indices": {
      "indices": [
        "INDEX_A",
        "INDEX_B"
      ],
      "query": {
        "term": {
          "FIELD": "VALUE"
        }
      },
      "no_match_query": {
        "term": {
          "FIELD": "VALUE"
        }
      }
    }
  }
}

TIA

您可以明确告诉NEST使用多个索引:

client.Search(s=>s
.索引(新的[]{“索引A”、“索引B”})
...
)
如果要搜索所有索引

client.Search(s=>s
.AllIndices()
...
)
或者如果要搜索一个索引(这不是默认索引)

client.Search(s=>s。
.索引(“索引A”)
...
)
记住,由于elasticsearch 19.8,您还可以在索引名上指定通配符

client.Search(s=>s
.Index(“Index_*”)
...
)
至于你的

client.Search(s=>s
.AllIndices()
.Query(q=>q
.指数(i=>i
.索引(新的[]{“索引A”、“索引B”})
.Query(iq=>iq.Term(“字段”、“值”))
.NoMatchQuery(iq=>iq.Term(“字段”、“值”))
)
)
);
更新

这些测试展示了如何让C#的协方差为您工作:

在您的情况下,如果所有类型都不是共享基的子类,您仍然可以使用“object”

i、 e:

.Search(s=>s)
.类型(产品类型、类别类型、制造商类型)
.Query(…)
);
这将搜索
/yourdefaultindex/产品、类别、制造商/\u搜索
,并设置一个默认
具体类型选择器
,以了解每个返回文档的类型


使用
ConcreteTypeSelector(Func)
您可以基于某些json值(动态)或hit元数据手动返回类型

你好,Martijn,谢谢你的回复!我已经找到了查询不同索引的方法。我目前面临的主要问题是,我有不同的文档类型和不同的结构存储在索引中,如书籍、汽车等。我的意思是,您的示例是:客户端。在我的情况下,Search MyObject将更通用,因为我想通过一个查询检索书籍、汽车等。我尝试使用泛型类型,但没有成功。我获取文档的唯一方法是使用client.Search(查询)。我还将MapTypeIndex添加到连接设置(…)。你能举一个例子来完成像
var results=Client.Search(s=>s.index(new[]{“Book index”,“Car index”}).Size(200.MatchAll())
或者你推荐另一种方法吗?非常感谢你的努力!更新:目前我使用的是书籍、汽车等的基类,但它不是一个干净的解决方案。
客户端。搜索
@Neil NEST也应该在这里介绍你,请看我的更新答案。@Martjin,非常感谢你-非常有效!我已经更新了问题很高兴。