c# - 字典项目的 ElasticSearch/NEST 索引策略
问题描述
我有一个包含字段的文档模型,该字段是一个字典,可以采用任何值,如下所示:
public class Document
{
public string Id { get; set; }
public string Description { get; set; }
public Dictionary<string, object> Permissions { get; set; }
public Dictionary<string, object> Metadata { get; set; }
}
例如
client.IndexDocument(new Document
{
Id = "4",
Description = "ordinary document",
Metadata = new Dictionary<string, object>
{
{ "publish_date", new DateTime(1930, 10, 11) },
{ "author_country", "RU" },
{ "salary", 2590.00 },
{ "likes", 23 },
}
})
映射是自动完成的,因此默认分析器会更改字典的值,例如:将字符串更改为小写或删除破折号,因此此代码不会返回任何结果:
var result = client.Search<Document>(s => s
.Query(q =>
q.Term(new Field("metadata.author_country"), "RU"))
);
如何为任何元数据值禁用此行为?或者设置自定义分析器?或者 - 仅对给定类型的值禁用它?
解决方案
您应该将文档字段的映射设置为正确的类型。在此处查看更多信息: https ://www.elastic.co/guide/en/elasticsearch/reference/7.10/mapping.html 所有类型都在此处列出: https ://www.elastic.co/guide/en/ elasticsearch/reference/7.10/mapping-types.html
要在 Nest 中执行此操作,您需要将正确的属性添加到文档定义中。
在此处查看详细信息: https ://www.elastic.co/guide/en/elasticsearch/client/net-api/current/attribute-mapping.html
如果我了解您要执行的操作,则需要将元数据类型设置为嵌套,因为您要搜索元数据:
https://www.elastic.co/guide/en/elasticsearch/reference/current/nested.html
推荐阅读
- powerbuilder - 连接到新对象在 powerbuilder 中返回 -3
- react-native - 当可观察数组更改时,ListItem 不会在 FlatList 中重新呈现
- python - 对于两列中的每一列,选择第三列的前 n 个 PYSPARK
- c++11 - std::function 作为 std::function 的参数
- c++ - 这个 (i+dir/2)%dir 在这一行 dir_map[xdx][ydy]=(i+dir/2)%dir; 中做了什么?
- c - 函数似乎改变了指针指向的位置
- python - 在 Jupyter Notebooks 中使用 Python 和类时出现无效语法错误
- postgresql - 如何编写在postgresql中返回表的非参数化函数
- python - 连接新元数据并复制到所有行的最佳方法(熊猫)
- python - Python2.7 xml文件中的特殊字符