Elasticsearch query_string通配符语法

时间:2015-10-27 19:51:21

标签: elasticsearch wildcard

显然我可以使用以下通配符query_string查询ES:

curl 'http://localhost:9200/my-index/_search?pretty' -d '{
  "query": {
    "query_string": {
      "query": "*:sw?ft"
    }
  }
}'

这是针对_all字段的查询吗?这相当于:

curl 'http://localhost:9200/my-index/_search?pretty' -d '{
  "query": {
    "query_string": {
      "default_field" : "_all"
      "query": "sw?ft"
    }
  }
}'

如果在编制索引时禁用_all该怎么办?我找不到它的文档。

提前致谢。

2 个答案:

答案 0 :(得分:1)

搜索命令设置为*:sw?ft的{​​{3}}将转换为类似以下内容(假设您的my-index索引具有单个my_field字段,例如) :

(_field_names:sw?ft | _all:sw?ft | _index:sw?ft | _parent:sw?ft | _uid:sw?ft | _type:sw?ft | _routing:sw?ft | _version:sw?ft | _timestamp:sw?ft | _source:sw?ft | _size:sw?ft | my_field:sw?ft | _id:sw?ft | _ttl:sw?ft | _boost:sw?ft)

因此,:之前的通配符将扩展到索引中的所有字段,而不仅仅是您自己定义的字段。对query_string中的通配符要非常小心,它们会以一种糟糕的方式影响群集的性能。

因此,要回答您的问题,*将扩展为所有索引的字段,包括_all。如果您只使用sw?ft作为搜索字符串,那么默认情况下,这将使用_all

答案 1 :(得分:0)

首先,这是query_string查询的文档:

它可以解答你的两个问题:

  

如果未在查询中明确指定要搜索的字段   字符串语法,index.query.default_field将用于派生   要搜索的字段。它默认为_all字段。

     

因此,如果禁用_all字段,则将其更改为有意义   设置不同的默认字段。