NEST:如何查询对多个索引和处理不同的子类(文档类型)?(NEST: How to query a

2019-09-01 05:17发布

我玩弄ElasticSearch结合窝在我的C#项目。 我的使用情况包括几个指数与我单独查询迄今不同的文件类型。 现在,我想实现它询问对所有现有索引进行全局搜索功能,文档类型和正确比分结果。

所以我的问题:如何实现通过使用NEST?

目前我使用的功能SetDefaultIndex但我怎么可以定义多个指标?

也许为了更好地理解,这是查询我想与NEST实现:

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

TIA

Answer 1:

你可以明确地告诉NEST使用多个指标:

client.Search<MyObject>(s=>s
    .Indices(new [] {"Index_A", "Index_B"})
    ...
)

如果你想在所有的索引搜索

client.Search<MyObject>(s=>s
    .AllIndices()
    ...
)

或者,如果你要搜索一个索引(那不是默认的索引)

client.Search<MyObject>(s=>s.
    .Index("Index_A")
    ...
)

因为elasticsearch 19.8记住,你也可以指定索引名通配符

client.Search<MyObject>(s=>s
    .Index("Index_*")
    ...
)

至于你indices_query

client.Search<MyObject>(s=>s
    .AllIndices()
    .Query(q=>q
        .Indices(i=>i
            .Indices(new [] { "INDEX_A", "INDEX_B"})
            .Query(iq=>iq.Term("FIELD","VALUE"))
            .NoMatchQuery(iq=>iq.Term("FIELD", "VALUE"))
        )
    )
);

UPDATE

这些测试炫耀你如何让C#的你协方差工作:

https://github.com/Mpdreamz/NEST/blob/master/src/Nest.Tests.Integration/Search/SubClassSupport/SubClassSupportTests.cs

在你的情况下,如果所有的类型不共享基地的子类,你仍然可以使用“对象”

即:

 .Search<object>(s=>s
      .Types(typeof(Product),typeof(Category),typeof(Manufacturer))
      .Query(...)
 );

这将搜索上/yourdefaultindex/products,categories,manufacturers/_search和设置默认ConcreteTypeSelector能理解什么类型,每个返回文档。

使用ConcreteTypeSelector(Func<dynamic, Hit<dynamic>, Type>)可以手动返回基于一些JSON值(动态)的类型或对命中元数据。



文章来源: NEST: How to query against multiple indices and handle different subclasses (document types)?