显然我可以使用以下通配符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
该怎么办?我找不到它的文档。
提前致谢。
答案 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
字段,则将其更改为有意义 设置不同的默认字段。