【问题标题】:Elasticseach wildcard query on nested types嵌套类型的 Elasticsearch 通配符查询
【发布时间】:2020-04-02 06:58:57
【问题描述】:

我正在尝试对 ElasticSearch 中的嵌套类型运行通配符查询。我有以下结构的记录:

{
  "field_1": "value_1",
  "nested_field_1": [
    {
      "field_type": "some_field_type",
      "field_value": "some_value"
    },
    {
      "field_type": "another_field_type",
      "field_value": "another_value"
    }
  ]
}

我希望能够在field_valuefield_type 上对nested_field 运行通配符查询。

我可以使用以下语法查询完全匹配:

  "query": {
    "nested": {
      "path": "nested_field_1",
      "query": {
        "bool": {
          "must": [
            {
              "match": {
                "nested_field_1.field_value": "another_value"
              }
            }
          ]
        }
      }
    }
  }
}

但是用wildcard 替换match 不会产生任何结果。 欢迎任何帮助。

【问题讨论】:

  • 你能显示你的通配符查询吗

标签: elasticsearch wildcard elasticsearch-query


【解决方案1】:

所以我刚刚尝试了您的示例,它给了我结果并使用了elasticsearch official wildcard query doc

索引定义

{
    "mappings": {
        "properties": {
            "field_1": {
                "type": "text"
            },
            "nested_field_1" :{
                "type" : "nested",
                "properties" : {
                    "field_type" :{
                        "type" : "text"
                    },
                    "field_value" :{
                        "type" : "integer" --> created as interfere field
                    }
                }
            }
        }
    }
}

索引文档

{
    "field_1": "value_1",
    "nested_field_1": [
        {
            "field_type": "some_field_type",
            "field_value": 20
        },
        {
            "field_type": "another_field_type",
            "field_value": 40
        }
    ]
}

通配符搜索查询

{
    "query": {
        "nested": {
            "path": "nested_field_1",
            "query": {
                "bool": {
                    "must": [
                        {
                            "wildcard": { --> note 
                                "nested_field_1.field_type": {
                                    "value": "another_field_type"
                                }
                            }
                        }
                    ]
                }
            }
        }
    }
}

搜索结果

  "nested_field_1": [
                        {
                            "field_type": "some_field_type",
                            "field_value": 20
                        },
                        {
                            "field_type": "another_field_type",
                            "field_value": 40
                        }
                    ]
                }

【讨论】:

  • field_value 被定义为integer 这一事实重要吗?在我的实际情况中,field_type 被定义为keywordfield_valuetext。在 keyword 字段上运行查询有效,但在 text 上运行它不会返回结果。
  • 你没有提供映射,所以我假设它是整数,但这并不重要,因为我们正在搜索 field_typetext 并且你的意思是你定义了这个到keyword,在那种情况下它不起作用?
  • 显然我的问题是在搜索时使用大写字母,当使用全小写时它可以工作!
  • 太好了,很高兴它有帮助
  • 顺便说一句,如果您使用text 字段,那么它将是不区分大小写的搜索,因为它使用将标记转换为小写的standard 标记器
猜你喜欢
  • 2015-12-15
  • 1970-01-01
  • 1970-01-01
  • 2020-04-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多