在ElasticSearch中对嵌套对象进行通配符搜索

亚伯拉罕·P

假设我们在以下结构中存储了类型为vehicle的对象,这些对象具有对类型所有者的引用。然后运行以下请求:

`POST:本地主机:9200/15 / vehicles / _search'

具有以下主体:

 { "query": { "wildcard": {"make":"*toy*"} }}

返回相关对象:

     "took": 5,
     "timed_out": false,
     "_shards": {
        "total": 5,
        "successful": 5,
        "failed": 0
     },
    "hits": {
        "total": 1,
    "max_score": 1,
    "hits": [
        {
            "_index": "15.index",
            "_type": "vehicle",
            "_id": "352",
            "_score": 1,
            "_source": {
                "id": "352",
                "name": "toyota",
                "owner_id": "12",
                "owner": {
                    "id": "12",
                    "name": "John Smith",
                    "login_id": 1,
                    "active": true,
                }
            }
        }
    ]
}

我现在尝试按嵌套对象查询(例如,属于用户John Smith的所有车辆)

 {"query": {"wildcard": {"owner.name": "*John*"}}}

不返回任何结果,而:

 {"query": {"wildcard": {"owner": {"name": "*John*"}}}}

错误出在:

  "error": "SearchPhaseExecutionException[Failed to execute phase [query], all shards failed; shardFailures {....
  [4]: SearchParseException[....
  Parse Failure [Failed to parse source [{ \"query\": { \"wildcard\": {\"owner\": {\"name\":\"*ab*\"} }}}]]]; nested: QueryParsingException[....
 [wildcard] query does not support [name]]; }{....
 [3]: SearchParseException[....
: Parse Failure [Failed to parse source [{ \"query\": { \"wildcard\": {\"owner\": {\"name\":\"*ab*\"} }}}]]]; nested: QueryParsingException[....
 [wildcard] query does not support [name]]; }{....
 [2]: SearchParseException[....
 ]: Parse Failure [Failed to parse source [{ \"query\": { \"wildcard\": {\"owner\": {\"name\":\"*ab*\"} }}}]]]; nested: QueryParsingException[....
 [wildcard] query does not support [name]]; }{....
 : SearchParseException[[....
: Parse Failure [Failed to parse source [{ \"query\": { \"wildcard\": {\"owner\": {\"name\":\"*ab*\"} }}}]]]; nested: QueryParsingException[....
 [wildcard] query does not support [name]]; }{....
 [0]: SearchParseException[....: Parse Failure [Failed to parse source [{ \"query\": { \"wildcard\": {\"owner\": {\"name\":\"*ab*\"} }}}]]]; nested: QueryParsingException[.... [wildcard] query does not support [name]]; }]",
"status": 400

针对嵌套对象的查询(通配符或其他方式)的正确格式是什么?通配符查询与该模板有何具体区别(如果有的话)?

丹·塔夫里(Dan Tuffery)

您需要使用嵌套查询来查询nested类型内的字段

{
  "query":{
    "nested":{
      "path":"owner",
      "query":{
        "wildcard":{
           "owner.name":"John*"
        }
      }
    }
  }
}

另外,您不应该以通配符开头,因为它会导致查询非常慢。

如果您有多个级别的nested对象,则path值应该是最深级别的nested对象,而查询中的属性应该是完整路径。

{
  "query":{
    "nested":{
      "path":"owner.pets",
      "query":{
        "wildcard":{
           "owner.pets.name":"{someValue}"
        }
      }
    }
  }
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

使用嵌套对象进行 Elasticsearch 搜索

Elasticsearch嵌套对象使用AND条件进行搜索

在Elasticsearch中对嵌套对象进行排序

ElasticSearch | 如何搜索嵌套对象?

在嵌套的 elasticsearch 对象中的所有键中搜索值

ElasticSearch 反向通配符搜索

在Elasticsearch中搜索对象数组

在Elasticsearch中,如何从多层嵌套对象的多个字段中搜索字符串

如何使用嵌套在 Elasticsearch 中搜索不在对象中的数据?

如何在elasticsearch中同时在嵌套字段中搜索单个对象的两个字段

对嵌套对象数组进行Elasticsearch查询

是否可以使用lucene查询语法在ElasticSearch中搜索嵌套对象?

Elasticsearch 中的嵌套字段、通配符查询和聚合

ElasticSearch中的嵌套搜索不起作用?

如何在 elasticsearch 中搜索嵌套属性

如何使用go在弹性搜索中按嵌套对象对文档进行排序?

如何在Elasticsearch中将父字段值与嵌套对象中的聚合值进行比较?

如何在没有偏移的情况下对 Elasticsearch 中的嵌套对象进行分页?

VBA使用通配符进行搜索

在 JSON 嵌套对象中搜索组合

在弹性搜索中存储嵌套对象

在嵌套对象中搜索特定键的值

Mongodb,嵌套数组中的搜索对象

-Filter中的通配符搜索

mongodb查询通配符嵌套对象

在ElasticSearch中建立索引后进行搜索

Elasticsearch 对嵌套字段中的值进行排序

搜索过滤器中具有通配符模式的嵌套组的 Active Directory 搜索查询

Elasticsearch:嵌套对象中的remove / update字段