請問各位大佬,我新增一筆資料不設定mapping 讓他會產生 name 跟 name.keyword 的字段
POST test/_doc
{
"name" : "ANDY"
}
但是用下方的 match 語法對 name.keyword 查詢大寫ANDY 會查的到資料?
就我的認知來說,使用match 會把輸入的值(ANDY)分詞後轉小寫(andy)(預設standard 的分詞器)
再去name.keyword 去比對資料,但name.keyword 存的資料應該都是大寫的ANDY
我不知道是我哪邊搞糊,還請各位大佬解個惑 ,先謝謝了
GET test/_search
{
"query": {
"match": {
"name.keyword": "ANDY"
}
}
}
POST test/_doc
{
"name" : "ANDY"
}
但是用下方的 match 語法對 name.keyword 查詢大寫ANDY 會查的到資料?
就我的認知來說,使用match 會把輸入的值(ANDY)分詞後轉小寫(andy)(預設standard 的分詞器)
再去name.keyword 去比對資料,但name.keyword 存的資料應該都是大寫的ANDY
我不知道是我哪邊搞糊,還請各位大佬解個惑 ,先謝謝了
GET test/_search
{
"query": {
"match": {
"name.keyword": "ANDY"
}
}
}
3 个回复
Charele - Cisco4321
赞同来自: dadaball
这些只是针对text这种分词的类型来说的,
name.keyword是keyword类型的,不会这么做的,只是简单的匹配。
至于termQuery还是matchQuery的问题,
其实这个"TermQuery"是lucene里面的类型,
因为Lucene里面并没有"MatchQuery"这个一样类型,所以Lucene并不认识"match query",
所谓的"match query"只是ES提供给用户的一个API,
所以要分解成TermQuery类型(或者是bool + TermQuery)传给Lucene,
因为实际工作都是由Lucene来完成的
Ombres
赞同来自:
dadaball
赞同来自:
這四種組合都是 TermQuery
1. match + keyword 字段
2. match + 無keyword 字段
3. term + keyword 字段
4. term + 無keyword 字段
我想說用match 應該是 matchQuery
term 應該是 termQuery
結果都是 termQuery
還是不懂 Orz