我在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<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_*")
...
)
至于你的indexs_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"))
)
)
);
更新
这些测试展示了如何使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值(动态)或匹配的元数据手动返回类型。
问题内容: 我们为企业托管了许多网站,每个企业都有许多可能希望通过ES进行索引和搜索的文档类型。 通常,每个企业拥有的文档类型数量少于20,每种类型的文档数量可能少于10万(通常少得多)。 我不确定如何设置这些网站的数据?我应该将它们放在单独的索引中,还是应该将它们全部塞入具有不同文档类型的同一索引中?还是还有其他东西? 也许,我什至应该更深入地索引中小型网站?如果计划扩展到5万个站点,应该准备哪
我正在尝试通过 SQL API 查询 Cosmos DB。我有一个简单的数据模型,其中包含同一容器中不同类型的文档(因为它们彼此相关),并且我正在为本教程之后定义文档类型的每个文档使用自定义键。以下是我的文档的外观: 我知道synatx在Cosmos DB中不同,并且仅在同一文档中工作。我正在尝试找到一种方法来检索文档及其所有属性从文档和中检索: 有可能以有效的方式吗?如果不是,我正在考虑在写入C
问题内容: 我有一个使用MVC模式开发的应用程序,我现在希望为其建立多个模型的索引,这意味着每个模型具有不同的数据结构。 使用多个索引(每个模型一个索引还是在每个模型的相同索引中使用一个类型)是更好的选择吗?我认为这两种方式都需要不同的搜索查询。我刚刚开始。 如果数据集很小或很大,这两个概念在性能上是否存在差异? 如果有人可以为我推荐一些好的样本数据,我自己会测试第二个问题。 问题答案: 两种方法
问题内容: 我创建了这个功能: 该函数在2个索引中查找搜索词。Visual Studio向我显示以下消息: “已弃用。您可以在查询中指定_index以定位特定索引” 但是我该怎么办呢? 问题答案: 由于不建议使用indexs查询,因此它目前仍可以使用,但不推荐使用该警告是可能在将来的主要版本中将其删除。 您可以通过以下方式实现与索引查询相同的功能: 产生以下查询JSON
我使用的是spring-data-elasticsearch,一开始一切都很好。 是否可以在运行时使用不同的索引创建存储库? 多谢了,马塞尔
我有一个使用MVC模式开发的应用程序,现在我想对它的多个模型进行索引,这意味着每个模型都有不同的数据结构。 > 是使用多个索引更好,每个模型使用一个索引,还是在每个模型的同一索引中使用一个类型?我认为,这两种方法都需要不同的搜索查询。我刚开始做这个。 如果数据集是小的还是大的,这两个概念在性能上是否存在差异? 如果有人能为我推荐一些好的样本数据,我会自己测试第二个问题。