ElasticSearch中march、term查詢總結

我的使用總結的,不必定全面和正確,僅供參考api

ElasticSearch版本:5.1
march 對輸入進行分詞
term 不對輸入進行分詞,直接搜索app

字段類型:
text:會對字段進行處理,分詞,造成分詞表,轉換成小寫
keyword:保持不變spa

對text和keyword的搜索支持(僅僅是手動設定了mapping的基礎上).net

  text keyword
march 若在分詞表中,匹配輸入的關鍵詞,無需轉換大小寫 能夠匹配輸入的關鍵詞,無需轉換大小寫
term

能夠匹配輸入的關鍵詞,把原英文字符轉換成小寫後,若在分詞表中,就能夠匹配
若輸入和字段的內容徹底一致,匹配不到code

輸入的關鍵詞必需要和字段內容、大小寫徹底一致才能匹配

 

實例:
mapping:
 blog

PUT test
{
	"mappings":{
		"doc":{
			"properties":{
				"content":{
					"type":"text",
					"store": true,
					"analyzer": "ik_max_word"
				},
				"title":{
					"type":"keyword"
				},
				"tags":{
					"type":"keyword"
				}
			}
		}
	}
}

 

插入的數據:(由於試驗方便,輸入插入的比較零散)
 ci

POST test/doc
{
  "content":"美國留給伊拉克的是個爛攤子嗎",
  "title":"標題",
  "tags":["美國","伊拉克","爛攤子"]
}

POST test/doc
{
  "content":"中國是世界上人口最多的國家",
  "title":"中國",
  "tags":["中國","人口"]
}

POST test/doc
{
  "content":"中國是世界上人口最多的國家",
  "title":"中國 的人口",
  "tags":["中國","人口"]
}

POST test/doc
{
  "content":"Xixi Haha xixihaha",
  "title":"Xixi Haha",
  "tags":["xixi","haha"]
}

POST _bulk
{"index":{"_index":"test","_type":"doc"}}
{"content":"同一個世界同一個夢想","title":"北京奧運","tags":["和平"]}
{"index":{"_index":"test","_type":"doc"}}
{"content":"杭州是一個美麗的城市,歡迎來到杭州","title":"宣傳","tags":["旅遊","城市"]}

 

重點操做term
term中文下對text的查詢:it

GET test/doc/_search
{
  "query":{
    "term": {
      "content":"同一個世界"
    }
  }
}

沒有結果table

term中文下對keyword的查詢:ast

GET test/doc/_search
{
  "query":{
    "term": {
      "title":"北京奧運"
    }
  }
}

結果搜索到了

關鍵詞變成「北京」,就不行

term對text字段的查詢:
輸入的文字,在分詞表中:

GET test/doc/_search
{
  "query":{
    "term": {
      "content":"美麗"
    }
  }
}

能夠匹配
若:

GET test/doc/_search
{
  "query":{
    "term": {
      "content":"美"
    }
  }
}

就沒有結果

緣由是:美麗在分詞表中,美這個字不在。這種狀況match和term都不行
 

網上看到了一篇文章,是在沒有指定mapping的狀況下,解決方案,以資參考。
http://blog.csdn.net/SunnyYoona/article/details/51842221
沒有指定mapping的狀況下,Elasticsearch會自動建立一個mapping.
可是這個maping感受有點小複雜...
爲嘛一個字段,既有text,又有keyword類型....

相關文章
相關標籤/搜索