2015-10-27 98 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通配符是,所以它似乎沒有意義。謝謝您的回覆。 –

相關問題