query_string
es7.7 关于es中的query_string查询,多字段多值, 如何转变为只需填写在query参数里的查询
Elasticsearch • FFFrp 回复了问题 • 2 人关注 • 1 个回复 • 5341 次浏览 • 2020-07-04 01:04
怎么精确查询关键字elastic
Elasticsearch • laoyang360 回复了问题 • 3 人关注 • 2 个回复 • 3545 次浏览 • 2018-10-09 18:54
query_string多值OR查询
Elasticsearch • laoyang360 回复了问题 • 3 人关注 • 1 个回复 • 4992 次浏览 • 2018-06-26 22:32
query_string查询疑问
Elasticsearch • kennywu76 回复了问题 • 4 人关注 • 4 个回复 • 18103 次浏览 • 2017-09-12 10:51
携带有通配符的query_string查询结果解析问题
Elasticsearch • shiyuan 回复了问题 • 4 人关注 • 2 个回复 • 11080 次浏览 • 2017-04-04 21:42
query_string里default_field带type前缀无法搜索出结果
Elasticsearch • medcl 回复了问题 • 2 人关注 • 1 个回复 • 5844 次浏览 • 2016-03-31 12:22
1. 创建一个空索引,name字段为keyword不分词, desc字... 显示全部 »
1. 创建一个空索引,name字段为keyword不分词, desc字段为text分词 PUT test_index/
{
"mappings": {
"typeme": {
"properties": {
"name": {
"type": "keyword"
},
"desc": {
"type": "text"
}
}
}
}
}
对name 字段执行一个query string query,带上"profile":true选项,看ES怎么解析这个查询的。 POST test_index/_search
{
"profile": true,
"query": {
"query_string": {
"default_field": "name",
"query": "John Wall"
}
}
} 结果:[code]query": [
{
"type": "BooleanQuery",
"description": "name:John name:Wall",
"time": "0.1274150000ms",[/code]被解析成一个查询和John和Wall,关系为OR的boolean Query,看起来似乎查询串被分词了,但实际上是对结果的误读。 仔细看John和Wall的首字母大些被保留着,而默认的分词器是是含有lower case filter的。
那么为什么John Wall被分成两个词查询了,实际上起作用的是默认的split_on_whitespace: true这个参数,查询串被按照空格分割了。
如果这个参数设置为false, POST test_index/_search
{
"profile": true,
"query": {
"query_string": {
"default_field": "name",
"query": "John Wall",
"split_on_whitespace": false
}
}
} 得到的查询是这样的:[code]"query": [
{
"type": "TermQuery",
"description": "name:John Wall",
"time": "0.04509200000ms",[/code]
查询的是"John Wall"这个完整的Term。
如果查询的是"John,Wall",结果则是这样:[code]query": [
{
"type": "TermQuery",
"description": "name:John,Wall",[/code]也可以证明,对于不分词字段做Query string 查询,查询串是不会分词的。
对比以下,如果对desc这个分词字段做同样的查询,会是怎样: POST test_index/_search
{
"profile": true,
"query": {
"query_string": {
"default_field": "desc",
"query": "John,Wall"
}
}
}
从结果可以看到,查询串被从逗号处进行了分割,并且term都被lower case转换掉了。[code] "query": [
{
"type": "BooleanQuery",
"description": "desc:john desc:wall",
"time": "0.1125100000ms",[/code]
不理解查询是如何执行的时候,多用"profile":true这个参数去看看,对比文档理解会比较好。 否则靠对文档的一知半解去猜测,很容易搞成一团浆糊。
es7.7 关于es中的query_string查询,多字段多值, 如何转变为只需填写在query参数里的查询
回复Elasticsearch • FFFrp 回复了问题 • 2 人关注 • 1 个回复 • 5341 次浏览 • 2020-07-04 01:04
query_string多值OR查询
回复Elasticsearch • laoyang360 回复了问题 • 3 人关注 • 1 个回复 • 4992 次浏览 • 2018-06-26 22:32
携带有通配符的query_string查询结果解析问题
回复Elasticsearch • shiyuan 回复了问题 • 4 人关注 • 2 个回复 • 11080 次浏览 • 2017-04-04 21:42
query_string里default_field带type前缀无法搜索出结果
回复Elasticsearch • medcl 回复了问题 • 2 人关注 • 1 个回复 • 5844 次浏览 • 2016-03-31 12:22