es query_string 和 match 的區別


 默認使用 空格拆分成 多個 子項,並且 每個子項 都會去分詞 查詢。可以通過 default_operator 指定  子項之間的關系。默認是 或 。 然后 每個 子項前面可以使用 -+ 指定必須有 或者必須么有。並且 加了修飾符 +- 的 提出單獨算。

 

測試數據:

{
  "took": 4523,
  "timed_out": false,
  "_shards": {
    "total": 5,
    "successful": 5,
    "skipped": 0,
    "failed": 0
  },
  "hits": {
    "total": 4,
    "max_score": 1,
    "hits": [
      {
        "_index": "test01",
        "_type": "doc",
        "_id": "2",
        "_score": 1,
        "_source": {
          "name": "zhang san"
        }
      },
      {
        "_index": "test01",
        "_type": "doc",
        "_id": "4",
        "_score": 1,
        "_source": {
          "name": "張玉坤"
        }
      },
      {
        "_index": "test01",
        "_type": "doc",
        "_id": "1",
        "_score": 1,
        "_source": {
          "name": "zhang yu kun"
        }
      },
      {
        "_index": "test01",
        "_type": "doc",
        "_id": "3",
        "_score": 1,
        "_source": {
          "name": "li san"
        }
      }
    ]
  }
}

 

 

 

"query": "zhang san",
"default_operator": "OR"   可以查詢 有 zhang  或者 san 的 。

 

"query": "zhang +san",
"default_operator": "OR"  查詢出  必須有san  可以有zhang 的 數據。(   有修飾符的  是提出來優先算的,剩下的在算 或關系 。並且 或中至少要有一個  ),因為只剩一個or 所以這個 zhang 必須有 。所有就是 有 zhang  有 san

 

"query": "zhang -san",
"default_operator": "OR"  查詢 必須沒有san ,剩下 or 只有一個zhang  所以這個zhang  必須瞞住。所以就是  必須有zhang  ,但是必須沒有san 

 

 

"query": "張三",
"default_operator": "OR"  依舊可以查到張玉坤,所以 是分詞的。 分詞以后是或 關系。並且+- 的修飾只能出現在詞頭。不能出現在詞中

 

 

"query": "張三",
"default_operator": "AND"  這個就什么都查詢不到了。說明  default_operator 對分詞以后的term 生效。

 

 

加一個 
PUT /test01/doc/5
{
"name":"kun bo"
}

 

"query_string": {
"query": "zhang bo -san"  這時候查詢出了新添加的那條 ,所以 沒有 san , zhang 和 bo 帶一個就可以。

 

"query_string": {
"query": "zhang bo +san"   這按照我的猜想應該是  必須有 san , zhang  bo 有一個 。但是 卻 可以 zhang bo 都沒有。 這個就不知道為啥了,姑且 當做 es 的 一個bugger 吧。

 

 

 

 

在說說  mach 查詢  。mach 查詢只是 分詞以后查詢。相當於  query_string  空格 隔開的 一個子項。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM