我有一个索引是从一个相当简单的模型中自动化的。
唯一的复杂性是动态值列表,用户可以在其中创建自己的数据。每个值都有一个Title(数据是什么)和Value。例如,数组中的2个项可能是:
可能有很多这些,我们不知道它们会是什么。它们可以由CMS中的用户添加。
我的课程看起来像这样:
public class SearchRequest
{
public int DocumentId { get; set; }
public string DocumentName { get; set; }
public List<DynamicTextValue> DynamicTextValues { get; set; }
}
public class DynamicTextValue
{
public string Title { get; set; }
public string Value { get; set; }
}
通用映射如下所示:
"documentId": {
"type": "integer"
},
"documentName": {
"type": "text"
},
"dynamicTextValues": {
"properties": {
"value": {
"type": "text"
},
"title": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
}
}
}
我还有类似概念的dynamicNumericValues和dynamicDateValues。
问题在于我想要搜索其中一种动态类型。假设我搜索姓氏“托马斯”。我添加了2个“必须”搜索:
或者
这不起作用,因为这两个字段彼此独立。它实际上将返回记录,其中任何值是托马斯(例如托马斯也是名字),只要它在同一记录中的某处包含姓氏的标题。我需要它只返回Value是Thomas在标题为Surname的同一列表项上。
有什么办法可以做到吗?或者是否有更好的方法来构建我的数据以实现这些结果?我认为(作为一个黑客)连接标题和值并搜索“姓氏托马斯”但这不能解决数字和日期字段的问题。
答案 0 :(得分:1)
DynamicTextValue
需要映射为nested
data type才能生效。 nested
数据类型在内部映射为单独的文档,在这种情况下维护属性title
和value
之间的关系。