我剛開始學習elasticsearch,想知道什麼是在下面的句子,我從elasticsearch website複製條款和價值之間的差額:方面爲每個字段,相較於在_all elasticsearch每個字段值
「值得注意的是,_all場組合從每場的原始值作爲字符串是很重要的,它不會從各個領域結合條款。
雖然我明白什麼是值是,我一直在摸索我的腦袋條款爲每個領域! 請問有人可以幫我一下嗎?
我剛開始學習elasticsearch,想知道什麼是在下面的句子,我從elasticsearch website複製條款和價值之間的差額:方面爲每個字段,相較於在_all elasticsearch每個字段值
「值得注意的是,_all場組合從每場的原始值作爲字符串是很重要的,它不會從各個領域結合條款。
雖然我明白什麼是值是,我一直在摸索我的腦袋條款爲每個領域! 請問有人可以幫我一下嗎?
您粘貼在前一段落給出了一些說明:
在上面例子中的字段DATE_OF_BIRTH被識別爲一個日期字段,因此將索引表示1970年10月24日00的單個術語: 00 UTC。然而,_all字段將所有值視爲字符串,因此日期值被索引爲三個字符串項:「1970」,「24」,「10」。
換句話說,所述_all
字段從索引文件採用原始值和運行它們通過自身分析器,產生其自己的術語,其然後被存儲在索引中。它不使用其他領域的分析儀生產的terms
。
上面貼上的段落給出了一個例子。它解釋date_of_birth
字段將被識別爲date
類型,因此將分析字段值並將其存儲爲單個字段1970-10-24 00:00:00 UTC
。所以,如果你會嘗試將date_of_birth
場與match
這樣的查詢匹配:
{ "query": { "match: { "date_of_birth": "24 10" } } }
你不會找到該文件,因爲解析器將無法解析所提供的價值爲日期。
在另一方面,如果你將運行在_all
場相同的查詢,你一定會發現,文檔:
{ "query": { "match: { "_all": "24 10" } } }
因爲作爲文檔建議,在_all
領域將包括以下text
類型條款:["1970", "10", "24"]
。
我們來看另一個例子。假設你有以下user
類型的mapping
:
"user": {
"properties": {
"nickname": { "type": "keyword" },
"name": { "type": "text" },
"age": { "type": "integer" }
}
}
你指數下列文件:
{
"nickname": "Super-Man",
"name": "John",
"age": 25
}
Elasticsearch將根據其類型分析這個文檔的領域,最終存儲每個下列條款
_all
:這些領域的["super", "man", "john", "25"]
- 所有字符串nickname
:["Super-Man"]
name
:["john"]
age
:[25]
- 整數因此,如果您將設法找到使用該文檔match
(或term
)查詢,其中nickname
等於super
你不會找到它。由於nickname
字段被分析爲keyword
,因此您必須使用確切的字符串來查找它 - "Super-Man"
。
但是,如果您嘗試使用match
查詢找到此文檔,其中_all
等於super
,您會發現它。另一方面,如果您嘗試使用對_all
字段的整數值25
的term
查詢來查找此文檔,您將找不到它。同樣,因爲_all
場只是一個text
場:
{ "query": { term": { "_all": 25} } }
但其上運行的age
場相同的查詢將返回文檔:
{ "query": { term": { "age": 25} } }
感謝@smnh,極通的解釋。 。只是一個簡單的問題:你認爲_all也可以與multi_match和類型短語一起使用嗎?我只是想知道,如果我正在尋找一個確切的短語_all可以使用 –
是的,你可以使用'_all'字段與'multi_match'的短語類型。但請記住,它將根據您匹配的字段以不同方式分析搜索到的短語。例如,對於_all字段,它將用空格拆分該短語,而對於'multi_match.fields'中指定的另一個字段,它將使用爲該字段指定的分析器。它也可能匹配兩個不同領域的短語。例如,如果你在_all字段上標記'{「name」:「Bob」,「tag」:「world」}'然後嘗試匹配一個短語「bob world」,你可能會發現你的文檔,儘管這個短語是來自兩個領域。 – smnh