2015-10-27 71 views
1

显然,我可以查询ES下列通配符query_stringElasticsearch QUERY_STRING通配符语法

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在索引中被禁用,该怎么办?我无法找到它的文档。

在此先感谢。

回答

1

一个query_string设置为*:sw?ft搜索命令将被转化为类似如下(假设你的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

+0

谢谢你这个梦幻般的答案!我想知道你在哪里找到所有这些细节? –

+0

这些细节可以使用[验证API](https://www.elastic.co/guide/en/elasticsearch/guide/current/_validating_queries.html#_understanding_queries);-)找到。这非常有用,尤其是'query_string'。 –

+0

ahaa!它会成为我的新朋友。谢谢。 –

0

首先,这对QUERY_STRING查询文档:

而且它有回答您的两个问题:

当没有明确指定领域在查询 字符串语法中搜索,index.query.default_field将用于派生 其中fie ld进行搜索。它默认为_all字段。

因此,如果_all字段被禁用,则将其更改为 可能会设置不同的默认字段。

+0

我对“*:sw?ft”的语法感到困惑,我知道我可以使用单个字段来代替明星,但明星是否搜索_all或每个索引字段?如果明星搜索_all,AFAIK,_all不是小写字母,但是query_string通配符是,所以它似乎没有意义。谢谢您的回复。 –

相关问题