query_string vs elasticsearch中的组匹配

Iev*_*nov 4 elasticsearch

这样的查询有什么区别:

"query": {
"bool": {
 ...
  "should": [
    {
      "match": {
        "description": {
          "query": "test"              
        }
      }
    },
    {
      "match": {
        "address": {
          "query": "test",              
        }
      }
    },
    {
      "match": {
        "country": {
          "query": "test"              
        }
      }
    },
    {
      "match": {
        "city": {
          "query": "test"
        }
      }
    }        
  ]
}}
Run Code Online (Sandbox Code Playgroud)

那一个:

"query": {
"bool": {
 ...      
  "should": [        
    {
      "query_string": {
        "query": "test",
        "fields": [
          "description",
          "address",
          "country",
          "city"              
        ]
      }
    }
  ]
}}
Run Code Online (Sandbox Code Playgroud)

表现,相关性?

提前致谢!

jav*_*nna 6

根据字段分析器分析查询(除非您在查询本身中指定分析器),因此使用单个查询查询多个字段并不一定意味着仅分析查询一次.

请记住,query_string支持lucene查询语法:AND和OR运算符,查询特定字段,通配符,短语查询等因此需要进行解析,我不认为这在性能方面有很大差异,但它容易出错并可能导致错误.如果您不需要所有这些功能,请坚持匹配查询,如果您想对多个字段执行相同的查询,请查看multi_match查询,该查询执行您对query_string所做的操作,但内部转换为多个匹配查询.

此外,如果您比较多个匹配查询的输出并且您的query_string可能会完全不同,则返回得分.使用bool查询可以有效地构建lucene布尔查询,而query_string默认"use_dis_max":"true"使用,这意味着它默认在内部使用dis_max查询.使用multi_match查询也是如此.如果设置use_dis_max为false,则将在内部使用bool查询.