您可以通過點擊以下命令來獲得預期結果。該命令在您的命令city
中添加一個額外的.keyword
。
curl -XGET 'localhost:9200/bank/_search?pretty' -H 'Content-Type: application/json' -d'{"query": {"wildcard": {"city.keyword": "R*d"} }, "_source": ["city"]}'
加入.keyword
當您插入數據elasticsearch的原因,你會發現一個.keyword
領域,該領域是not_analyzed
。默認情況下,您插入數據的字段是標準分析,並且存在多字段.keyword
。如果用數據創建了一個字段city
,那麼它會創建一個帶有標準分析器的字段city
,並添加一個多字段.keyword
,它是not_analyzed
。
在你的情況下,你需要一個not_analyzed
字段來查詢(如wildcard
查詢)。所以,你的查詢應該在city.keyword
這個字段默認是not_analyze。
在第一種情況下,您使用查詢參數命中了elasticsearch
的獲取請求。 Elasticsearch會自動將查詢轉換爲第二種格式。
對於可靠的來源,你可以按照Official docs
的string
領域已經分裂成兩個新類型:text
,應 使用全文搜索和keyword
,它應該用於 關鍵字搜索。
把事情做好,Elasticsearch
決定借用一個想法, 最初從Logstash
朵朵:字符串現在將映射既作爲 text
和keyword
默認。例如,如果您索引 以下簡單的文檔:
{
"foo": "bar"
}
然後下面的動態映射將被創建:
{
"foo": {
"type" "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
}
}
因此,它將既可以在foo上執行全文搜索 ,並使用foo.keyword
關鍵字搜索和聚合 字段。
我的回答沒有幫助你嗎? – sunkuet02
@ sunkuet02有用,謝謝!但是這使得兩種搜索方法彼此不一致(直觀)。你知道我是否可以對數據庫做任何事情,以便兩種方法都不需要「關鍵字」,或者兩者都需要「關鍵字」,也許? – Luke
我已經更新了我的答案。請檢查它,希望它有幫助。不要忘記加註並接受我的答案,這有助於。 – sunkuet02