3 回答

TA貢獻1801條經驗 獲得超8個贊
我認為沒有必要改變任何映射。嘗試使用query_string,它是完美的。所有方案都適用于默認的標準分析器:
我們有數據:
{"_id" : "1","name" : "John Doeman","function" : "Janitor"}
{"_id" : "2","name" : "Jane Doewoman","function" : "Teacher"}
場景1:
{"query": {
"query_string" : {"default_field" : "name", "query" : "*Doe*"}
} }
響應:
{"_id" : "1","name" : "John Doeman","function" : "Janitor"}
{"_id" : "2","name" : "Jane Doewoman","function" : "Teacher"}
場景2:
{"query": {
"query_string" : {"default_field" : "name", "query" : "*Jan*"}
} }
響應:
{"_id" : "1","name" : "John Doeman","function" : "Janitor"}
場景3:
{"query": {
"query_string" : {"default_field" : "name", "query" : "*oh* *oe*"}
} }
響應:
{"_id" : "1","name" : "John Doeman","function" : "Janitor"}
{"_id" : "2","name" : "Jane Doewoman","function" : "Teacher"}

TA貢獻1828條經驗 獲得超3個贊
我也在使用nGram。我使用標準tokenizer和nGram作為過濾器。這是我的設置:
{
"index": {
"index": "my_idx",
"type": "my_type",
"analysis": {
"index_analyzer": {
"my_index_analyzer": {
"type": "custom",
"tokenizer": "standard",
"filter": [
"lowercase",
"mynGram"
]
}
},
"search_analyzer": {
"my_search_analyzer": {
"type": "custom",
"tokenizer": "standard",
"filter": [
"standard",
"lowercase",
"mynGram"
]
}
},
"filter": {
"mynGram": {
"type": "nGram",
"min_gram": 2,
"max_gram": 50
}
}
}
}
}
讓我們找到最多50個字母的單詞部分。根據需要調整max_gram。在德語中,單詞可以變得非常大,所以我將其設置為高價值。

TA貢獻1865條經驗 獲得超7個贊
使用前導和尾隨通配符進行搜索對于大型索引來說會非常慢。如果您希望能夠通過單詞前綴進行搜索,請刪除前導通配符。如果你真的需要在一個單詞的中間找到一個子字符串,那么你最好使用ngram tokenizer。
- 3 回答
- 0 關注
- 1679 瀏覽
添加回答
舉報