query_string

query_string

query_string多值OR查询

Elasticsearchlaoyang360 回复了问题 • 2 人关注 • 1 个回复 • 107 次浏览 • 2018-06-26 22:32 • 来自相关话题

query_string查询疑问

Elasticsearchkennywu76 回复了问题 • 3 人关注 • 4 个回复 • 2049 次浏览 • 2017-09-12 10:51 • 来自相关话题

携带有通配符的query_string查询结果解析问题

Elasticsearchshiyuan 回复了问题 • 3 人关注 • 2 个回复 • 4460 次浏览 • 2017-04-04 21:42 • 来自相关话题

query_string里default_field带type前缀无法搜索出结果

Elasticsearchmedcl 回复了问题 • 2 人关注 • 1 个回复 • 2910 次浏览 • 2016-03-31 12:22 • 来自相关话题

条新动态, 点击查看
kennywu76

kennywu76 回答了问题 • 2017-09-12 10:36 • 4 个回复 不感兴趣

query_string查询疑问

赞同来自:

澄清一下,QueryString Query的查询串是否分词,是取决于查询的字段mapping怎么设置的。 如果是不分词字段,查询串也不会经过analyze过程。以下测试过程可以证明:
 
1. 创建一个空索引,name字段为keyword不分词, desc字... 显示全部 »
澄清一下,QueryString Query的查询串是否分词,是取决于查询的字段mapping怎么设置的。 如果是不分词字段,查询串也不会经过analyze过程。以下测试过程可以证明:
 
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这个参数去看看,对比文档理解会比较好。 否则靠对文档的一知半解去猜测,很容易搞成一团浆糊。
 

query_string多值OR查询

回复

Elasticsearchlaoyang360 回复了问题 • 2 人关注 • 1 个回复 • 107 次浏览 • 2018-06-26 22:32 • 来自相关话题

query_string查询疑问

回复

Elasticsearchkennywu76 回复了问题 • 3 人关注 • 4 个回复 • 2049 次浏览 • 2017-09-12 10:51 • 来自相关话题

携带有通配符的query_string查询结果解析问题

回复

Elasticsearchshiyuan 回复了问题 • 3 人关注 • 2 个回复 • 4460 次浏览 • 2017-04-04 21:42 • 来自相关话题

query_string里default_field带type前缀无法搜索出结果

回复

Elasticsearchmedcl 回复了问题 • 2 人关注 • 1 个回复 • 2910 次浏览 • 2016-03-31 12:22 • 来自相关话题