提示:以下操作均在kibana7.7.0中操作。
問題描述:
根據(jù)es去查詢商品的名稱,中文查詢能查詢出數(shù)據(jù),但是只輸入部分英文或者數(shù)字,查詢不出數(shù)據(jù)。
原因分析:
es中的分詞器,只將全部的數(shù)字和英文做了分詞,即將他們看成一個單詞,所以,只輸入部分英文或者數(shù)字時,不存在該部分的分詞,估查詢不出數(shù)據(jù)。
舉例:
查詢名稱為 【來自1998年的野狼disco】的商品。
查詢1:如果查詢 【1998】,可以;
查詢2:如果查詢 【199】,不行;
查詢3:如果查詢 【disco】,可以;
查詢4:如果查詢 【dis】,不行。
解決方案:
1、創(chuàng)建索引
# 創(chuàng)建索引,并設(shè)置分詞器
PUT /goods_index
{
"settings": {
"index.max_ngram_diff":10,
"analysis": {
"analyzer": {
"my_ngram_analyzer": {
"tokenizer": "my_ngram_tokenizer"
}
},
"tokenizer": {
"my_ngram_tokenizer": {
"type": "ngram",
"min_gram": 1,
"max_gram": 10,
"token_chars": [
"letter",
"digit"
]
}
}
}
},
"mappings": {
"properties": {
"name":{
"type": "text",
"analyzer": "my_ngram_analyzer"
},
"description":{
"type": "text"
},
"price": {
"type": "double"
},
"createtime": {
"type": "date",
"format": "yyyy-MM-dd HH:mm:ss||yyyy-MM-dd||epoch_millis"
}
}
}
}
重點是紅色部分,對需要查詢的字段設(shè)置一個自定義的NGram分詞器。
(支持模糊查詢數(shù)字和英文的關(guān)鍵?。?br>
2、增加文檔
# 增加數(shù)據(jù)
PUT /goods_index/_doc
{
"name" : "來自1998年的野狼disco",
"description" : "暫無描述。。。",
"createtime" : "1998-01-01 23:59:59",
"price": 1.99
}
3、模糊查詢
# 模糊查詢文檔,根據(jù)'得分'和創(chuàng)建時間排序,并高亮
GET /goods_index/_search
{
"query": {
"match": {
"name": "199"
}
},
"sort": [
{
"_score": {
"order": "desc"
}
},
{
"createtime": {
"order": "desc"
}
}
],
"highlight": {
"fields": {
"name": {}
}
},
"size": 10000
}
執(zhí)行,發(fā)現(xiàn)已經(jīng)可以根據(jù)英文或者數(shù)字進行模糊查詢了。文章來源:http://www.zghlxwxcb.cn/news/detail-525314.html
友情鏈接:ElasticSearch——全文搜索引擎文章來源地址http://www.zghlxwxcb.cn/news/detail-525314.html
到了這里,關(guān)于ElasticSearch支持根據(jù)英文或者數(shù)字進行模糊查詢的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!