当前位置: 首页 > 面试题库 >

Elasticsearch数组索引查询

丌官和泰
2023-03-14
问题内容

如何在Elasticsearch中按数组索引查询/过滤?

我有一个像这样的文件:

PUT /edi832/record/1
{
    "LIN": [ "UP", "123456789" ]
}

我想搜索 LIN [0] 是否为“ UP”并且 LIN [1]是否 存在。

谢谢。


问题答案:

这看起来可能像hack,但是可以肯定地起作用。首先,我们将令牌计数类型与多字段一起应用以捕获令牌数量作为字段。因此,映射将如下所示-

{
    "record" : {
        "properties" : {
            "LIN" : {
                "type" : "string",
                "fields" : {
                    "word_count": {
                        "type" : "token_count",
                        "store" : "yes",
                        "analyzer" : "standard"
                    }
                }
            }
        }
    }
}

链接-http: //www.elasticsearch.org/guide/zh-
CN/elasticsearch/reference/current/mapping-core-
types.html#token_count

因此,要检查第二个字段是否存在,就像检查此字段值是否大于或等于2一样容易。接下来,我们可以使用令牌过滤器来检查令牌“
up”在位置0中是否存在。脚本过滤器对此进行检查。因此,如下所示的查询应该有效-

{
  "query": {
    "filtered": {
      "query": {
        "range": {
          "LIN.word_count": {
            "gte": 2
          }
        }
      },
      "filter": {
        "script": {
          "script": "for(pos : _index['LIN'].get('up',_POSITIONS)){ if(pos.position == 0) { return true}};return false;"
        }
      }
    }
  }
}

高级脚本-http: //www.elasticsearch.org/guide/zh-
CN/elasticsearch/reference/current/modules-advanced-
scripting.html

脚本过滤器-http: //www.elasticsearch.org/guide/zh-
CN/elasticsearch/reference/current/query-dsl-script-
filter.html



 类似资料:
  • 我目前正在使用ElasticSearch(PHP客户端)构建一个电子商务系统搜索,但遇到了一个问题 我存储的数据是简单文本(如产品名称)和列表(如颜色、大小)的混合体 我遇到的问题是当产品没有任何颜色时 我有以下字段 所以当我发送一个产品时,它看起来是这样的 这就像预期的一样,但是当我尝试发送这样的东西时 它抛出了一个错误: {“error”:{“root_cause”:[{“type”:“map

  • 问题内容: 我在ElasticSearch和Rails时遇到问题,由于attr_protected,其中一些数据未正确索引。Elastic Search在哪里存储索引数据?检查实际的索引数据是否错误将很有用。 检查映射对您没有帮助,将列出该字段。 问题答案: 探索您的ElasticSearch集群的最简单方法可能是使用elasticsearch -head。 您可以通过以下方式安装它: 然后(假设

  • 问题内容: 我是Elasticsearch的新手,正在尝试使用和字段创建多字段索引。有了这些字段,它们都工作得很好,但是当我尝试在数组中获取一些结果时,它返回一个空的数组。 我的资料: 对应: 搜索: 期望: 按,或搜索,应返回结果 搜索应返回结果 搜索应返回结果 搜索依据不应返回结果 我想念什么? 问题答案: Cross_fields具有约束,所有字段应具有相同的搜索分析器,或者所有查询项应出现

  • 我可以使用Lucene查询ElasticSearch索引吗? 我使用ElasticSearch创建了一个索引,并插入了以下三个文档: null 不幸的是,d.get(“_source”)也返回null。 如何检索匹配查询的文档字段? 谢谢你。

  • 主要内容:创建索引,删除索引,获取索引,测试索引存在,打开/关闭索引API,索引别名,索引设置,分析,索引模板,索引统计,刷新清除数据, 刷新索引这些API负责管理索引的所有方面,如设置,别名,映射,索引模板。 创建索引 此API可用于创建索引。 当用户将对象传递到任何索引时,可以自动创建索引,也可以在此之前创建索引。 要创建索引,只需要发送包含设置,映射和别名的发布请求,或者只发送一个没有正文的简单请求。 例如, 响应 或者,加上一些设置 - 请求正文 响应 或使用映射 - 请求正文 响应 或

  • 问题内容: 我想在elasticsearch中检查索引是否存在。如果不存在,则应创建索引并执行其他功能。我试图找到一个解决方案,但是没有找到完美的解决方案。任何人都可以有解决此问题的任何解决方案。 我正在使用Elasticsearch库。 问题答案: 根据索引操作和源代码,以下应该工作