Elasticsearch-字符串類型


ES-用於定義文檔字段的核心類型

ES中一個字段可以是核心類型之一,如字符串、數值、日期、布爾型,也可以是一個從核心類型派生的復雜類型,如數組。

字符串類型

索引一類型為字符串的數據
doc1:

FengZhendeMacBook-Pro:bin FengZhen$ curl -XPUT 'localhost:9200/music/album/2' -d '{
> "name":"Late Night with Elasticsearch",
> "date":"2019-06-24T22:17"
> }'

doc2:

FengZhendeMacBook-Pro:bin FengZhen$ curl -XPUT 'localhost:9200/music/album/3' -d '{
> "name":"latenight",
> "date":"2019-06-24T22:20"
> }'

在name字符串字段里搜索單詞late

FengZhendeMacBook-Pro:bin FengZhen$ curl -XGET 'localhost:9200/music/album/_search?pretty' -d '{
>  "query":{
>     "query_string":{
>       "query":"late"
>     }
>  }
>  }'
{
  "took" : 11,
  "timed_out" : false,
  "_shards" : {
    "total" : 5,
    "successful" : 5,
    "failed" : 0
  },
  "hits" : {
    "total" : 1,
    "max_score" : 0.095891505,
    "hits" : [ {
      "_index" : "music",
      "_type" : "album",
      "_id" : "2",
      "_score" : 0.095891505,
      "_source" : {
        "name" : "Late Night with Elasticsearch",
        "date" : "2019-06-24T22:17"
      }
    } ]
  }
}

 

索引過程和搜索過程如下

 

當索引"name":"Late Night with Elasticsearch"時,默認的分析器將所有字符轉化為小寫,然后將字符串分解為單詞。
分析過程中生成了4個詞條,即late、night、with和elasticsearch。查詢的字符串經過同樣的處理過程,”late”生成了同樣的字符串”late”。因為查詢生成的late詞條和文檔生成的late詞條匹配了,所以文檔(doc1)匹配上了搜索。doc2沒有命中的原因是:在索引latenight時,默認的分析器只創建了一個詞條--latenight。
一個詞條是文本中的一個單詞,是搜索的基本單位。在不同的情景下,單詞可以意味着不同的事物,例如,它可以是一個名字,也可以是一個IP地址。如果只想嚴格匹配某個字段,應該將整個字段作為一個單詞來對待。
映射會對這種分析過程起到作用。可以在映射中指定許多分析的選項。例如,可以配置分析,生成原始詞條的同義詞,這樣同義詞的查詢同樣可以匹配。
在設置映射時,有個index選項,可選值有:analyzed(默認)、not_analyzed或no。
將album類型的name字段設置為not_analyzed,映射如下

 curl -XPUT 'localhost:9200/music/_mapping/album' -d '{
     "album":{
        "properties":{
            "name":{
                "type":"string",
                "index":"not_analyzed"
            }
        }
    }
 }'

index類型解釋:

(1) analyzed:默認情況下,index會被設置為analyzed;分析器將所有字段轉為小寫,並將字符串分解為單詞。當期望每個單詞完整匹配時,可以使用此選項
如:期望通過”late”搜出"Late Night with Elasticsearch"
(2) not_analyzed:分析過程被忽略,整個字符串被當做單獨的詞條進行索引。當進行精准的匹配時,可使用此選項
如:期望通過”big data”搜出”big data”,通過”big”搜不出”big data”
(3) no : 如果設置為no,則索引過程會被略過,也沒有詞條產生,因此無法在那個字段上進行搜索。當無需在這個字段上搜索時,這個選項節省了存儲空間,也縮短了索引和搜索的時間。

 


免責聲明!

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



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