我在索引文档中具有以下结构:
document1: "customLists":[{"id":8,"position":8},{"id":26,"position":2}]
document2: "customLists":[{"id":26,"position":1}]
document3: "customLists":[{"id":8,"position":1},{"id":26,"position":3}]
我可以使用匹配查询“ customLists.id =
26”来搜索属于给定列表的匹配文档。但是我需要根据该列表中的位置值对文档进行排序,并忽略其他列表的位置。
因此,预期结果将按document2,document1,document3的顺序排列
数据结构是否适合这种排序以及如何处理?
实现此目的的一种方法是将的映射类型设置
customLists
为嵌套,然后使用按嵌套字段排序
范例:
1)创建索引和映射
put test
put test/test/_mapping
{
"properties": {
"customLists": {
"type": "nested",
"properties": {
"id": {
"type": "integer"
},
"position": {
"type": "integer"
}
}
}
}
}
2)索引文件:
put test/test/1
{
"customLists":[{"id":8,"position":8},{"id":26,"position":2}]
}
put test/test/2
{
"customLists":[{"id":26,"position":1}]
}
put test/test/3
{
"customLists":[{"id":8,"position":1},{"id":26,"position":3}]
}
3)查询以给定ID按位置排序
post test/_search
{
"filter": {
"nested": {
"path": "customLists",
"query": {
"term": {
"customLists.id": {
"value": "26"
}
}
}
}
},
"sort": [
{
"customLists.position": {
"order": "asc",
"mode": "min",
"nested_filter": {
"term": {
"customLists.id": {
"value": "26"
}
}
}
}
}
]
}
问题内容: 我有一对对。是否可以精确匹配&的值,然后检查其范围值? 示例:在doc下面是一个带有名称,值对的数组。我需要检查它是否具有键,然后检查它的值是否小于1000。 以下是我的过滤器。 我还需要检查以下内容,以便返回结果 “ client.name”必须是“ Athena” “ client.db。@ type”必须为“ Oracle”,然后继续进行以下检查 找不到“ client.db.o
我试图按时间范围查询Elasticsearch索引,并另外让一个术语匹配特定的字符串值。 我尝试了这个查询,它看起来很简单: 在本例中,我希望给定时间范围内的所有文档也具有的方法值。 在我的结果中,我收到的结果在时间范围内,但我得到的文档具有字段的各种值,而我只想要该字段中的的结果。
该示例摘自Elasticsearch参考:https://www.elastic.co/guide/en/Elasticsearch/reference/5.3/nested.html 我的索引和这个差不多。唯一的区别是user.first和user.last是关键字类型,所以我可以对它们使用过滤器。 在两种情况下,我应该使用什么查询来获取与上面数组匹配的文档(正好是两个项,一个项是John Sm
我在ES中有一个多匹配查询,希望添加一个过滤器。 添加此筛选器的语法是什么? 我试过:
我必须在Elasticsearch中构造一个非常重要的查询(现在看来是这样)。假设我有两个实体,每个实体都有一个数组元素,由字符串组成: 数组元素的映射如下(使用动态模板): 实体的Json表示如下: 然后我有了用户输入:['A','B','C']。 我想要实现的是找到只包含输入中指定元素的实体——预期结果是:[A'、[B']、[A'、[C']、[A'],但不是['A'、[E'](因为用户输入中不
我试图在一个字符串中选择多个匹配项,如下所示: 123 废话 结束 45 废话 结束 理想情况下,我希望它返回2个以数字序列开头和以END字符串结尾的匹配项。我使用以下内容: 但是,上述模式在一个匹配项中返回整个输入字符串。我有一种感觉,这与“单行”选项有关。我做错了什么?