-1
我使用elasticsearch在搜索欄上給出自動搜索結果,但我希望它僅匹配單詞的開頭。例如。Elasticsearch - 僅在文字開始時獲得自動完成結果
doc_name_1 = "black bag"
doc_name_2 = "abla bag"
案例1. 在搜索欄的字符串是part_string = "bla"
我目前使用的查詢是
query_body = {"query": {
"match": {
"_all": {
"query": part_string,
"operator": "and",
"type": "phrase_prefix"
}
}
}}
此查詢返回doc_name_1
和doc_name_2
命中。
我需要的僅僅是打doc_name_1
因爲doc_name_1
的啓動方式與查詢的字符串不同。 我試過使用"type":"phrase"
,但ES不斷在文檔中的文字「內」。是否可以通過修改查詢來做到這一點?或設置?
我會分享我的ES設置:
{ "analysis":{
"filter":{
"nGram_filter": {
"type": "ngram",
"min_gram": 1,
"max_gram":20,
"token_chars": [
"letter",
"digit",
"punctuation",
"symbol"
]
}},
"analyzer":{
"nGram_analyzer": {
"type": "custom",
"tokenizer": "whitespace",
"filter":[
"lowercase",
"asciifolding",
"nGram_filter"
]
},
"whitespace_analyzer": {
"type":"custom",
"tokenizer": "whitespace",
"filter": [
"lowercase",
"asciifolding"
]
}}}}
我想使用邊緣n-gram,但是應該將它與n-gram分析器或INSTEAD一起添加到設置中嗎?得到這個錯誤「Analyzer [nGram_analyzer]找不到字段[_all]」 –
對不起,解決了上次評論中的問題,它與映射文檔有關。 –
是的,你必須上傳新的設置,然後上傳新的映射,並將所有的文檔重新索引到ES。 – user3775217